Как отменить регистрацию LocalBroadcastManager в ViewHolder?

У меня есть ViewHolder, который регистрируется как приемник для LocalBroadcastManager. У ViewHolder также есть делегат от Activity, который содержит RecyclerView.

Это вызывает утечку памяти, потому что мне не удается отменить регистрацию диспетчера вещания в держателе представления, когда действие уничтожается.

public class MyHolder extends RecyclerView.ViewHolder {

    public interface Delegate {
        ...
    }

    private @Nullable Delegate delegate;

    public MyHolder(@NonNull View itemView) {
        super(itemView);
    }

    public void bind(@NonNull Delegate delegate) {
        this.delegate = delegate;
        registerNotifications();
    }

    public void recycle() {
        unregisterNotifications();
        delegate = null;
    }

    private void registerNotifications() {
        LocalBroadcastManager.getInstance(App.getInstance().getApplicationContext()).registerReceiver(broadcastReceiver, new IntentFilter(MyFilter));
    }

    private void unregisterNotifications() {
        LocalBroadcastManager.getInstance(App.getInstance().getApplicationContext()).unregisterReceiver(broadcastReceiver);
    }

    private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            ...
        }
    };
}

Я пытался позвонить recycle в onViewDetachedFromWindow и onViewRecycled RecyclerView.Adapter. Но похоже, что нет никакой гарантии, что какой-либо из них будет вызван при уничтожении активности.

Как я могу убедиться, что широковещательный приемник правильно отменяется при уничтожении активности или повторном использовании ViewHolder?


comment
Кажется, это дубликат stackoverflow.com/questions/37674692/. Я попробую это решение и закрою этот вопрос, если оно сработает.   -  person Manuel    schedule 09.12.2019
comment
Отвечает ли это на ваш вопрос? Что такое жизненный цикл адаптера RecyclerView?   -  person Manuel    schedule 09.12.2019
comment
Я не уверен, следует ли удалить или закрыть вопрос как дубликат. Я проголосовал за дубликат, потому что вопрос может быть ценным дополнительным указателем для других.   -  person Manuel    schedule 09.12.2019