我正在开发一个安卓应用程序,我正在其中一个activity
中注册Broadcast Receiver
。
问题
假设活动名称为 MyActivity
,并且我在此活动中注册的Broadcast Receiver
为 myReceiver
。
我想从另一个Broadcast Receiver
取消注册myReceiver
,让我们称之为secondReceiver
,onReceive
方法。我有一个方法,让我们称之为 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);
}
}