我正在开发一个Android应用,其中我在Broadcast Receiver
之一中注册了activity
。
问题
让我们假设活动名称为MyActivity
,而我在此活动中注册的Broadcast Receiver
为myReceiver
。
我想从另一个myReceiver
取消注册Broadcast Receiver
,将其称为secondReceiver
,onReceive
方法。我有一个方法,叫它myMethod
,可以在myReceiver
活动中注销myActivity
。
当我从myMethod
内部调用此secondReceiver
时,出现了IntentReceiverLeaked
异常。
问题
如何从另一个Broadcast Receiver
取消注册Broadcast Receiver
?
答案 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);
}
}