使用另一个广播接收器注销广播接收器



我正在开发一个安卓应用程序,我正在其中一个activity中注册Broadcast Receiver

问题

假设活动名称为 MyActivity,并且我在此活动中注册的Broadcast ReceivermyReceiver

我想从另一个Broadcast Receiver取消注册myReceiver,让我们称之为secondReceiveronReceive方法。我有一个方法,让我们称之为 myMethod ,以取消注册myActivity活动中的myReceiver

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

问题

如何从其他Broadcast Receiver取消注册Broadcast Receiver

运行

从另一个活动实例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);
    }
}

相关内容

  • 没有找到相关文章

最新更新