我在活动中定义了一个BroadcastReceiver,其方式如下,以从运行在另一个线程上的IntentService获得结果:
receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
boolean isSyncCompleted = intent.getBooleanExtra("issynccompleted", false);
if (isSyncCompleted){
showAlert("Sync completed in service");
}
context.unregisterReceiver(receiver);
}
};
//register receiver for service
registerReceiver(receiver, new IntentFilter(ContentSyncService.SERVICE_INTENT_FILTER));请注意,我是在onReceive代码块中而不是在onPause中注销接收器。那是因为我想让接收者倾听,即使活动已经被摧毁。
但是我一直收到一个错误:"Activity .泄露了IntentReceiver .它原来是在这里注册的。您是否错过了对unregisterReceiver()的电话?“
发布于 2013-11-12 16:57:12
这个解决方案对我有效,我重写活动方法,而不是BrodcastReceiver:
@Override
protected void onPause() {
super.onPause();
// unregister receiver
LocalBroadcastManager.getInstance(this).unregisterReceiver(
mMessageReceiver);
}
@Override
protected void onResume() {
super.onResume();
// register receiver
LocalBroadcastManager.getInstance(this).registerReceiver(
mMessageReceiver, new IntentFilter("your.package.name"));
}发布于 2013-11-12 19:12:59
只有当您收到至少一次操作时,才会注销接收方。因此,您需要在OnPause (如果需要的话在其他地方)注销您的接收器,因为在那里您是安全的,这将永远注销接收器。
发布于 2013-11-21 18:38:22
在您的接收器内使用context.unregisterReceiver(接收器),
试一试:activity.unregisterReceiver(这个);
https://stackoverflow.com/questions/19934676
复制相似问题