使用其他广播接收器注销广播接收器

时间:2019-01-02 07:47:40

标签: android android-broadcastreceiver

我正在开发一个Android应用,其中我在Broadcast Receiver之一中注册了activity

问题

让我们假设活动名称为MyActivity,而我在此活动中注册的Broadcast ReceivermyReceiver

我想从另一个myReceiver取消注册Broadcast Receiver,将其称为secondReceiveronReceive方法。我有一个方法,叫它myMethod,可以在myReceiver活动中注销myActivity

当我从myMethod内部调用此secondReceiver时,出现了IntentReceiverLeaked异常。

问题

如何从另一个Broadcast Receiver取消注册Broadcast Receiver

1 个答案:

答案 0 :(得分:0)

一种从其他活动实例运行myMethod的注销方法的一种方法是,使用自己的自定义操作myActivity上注册广播接收器,并且在onReceive方法中,您调用myMethod取消注册接收者。然后,当您要取消注册接收者时,只需通过声明的操作发送广播即可。这样,就不会由于不维护对myActivity的引用而导致任何泄漏。

这是一个示范:

public class MyActivity extends AppCompatActivity {
    private static final String ACTION_UNREGISTER = "com.yourDomain.subDomain.UNREGISTER_RECEIVER";
    private BroadcastReceiver mUnregisteringReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            myMethod();
        }
    };
    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        ...
        registerReceiver(mUnregisteringReceiver, new IntentFilter(ACTION_UNREGISTER));
    }

    @Override
    protected void onDestroy() {
        ...
        unregisterReceiver(mUnregisteringReceiver);
    }
}