我不明白为什么我点击后退按钮时得到这个异常。我有IntentReceiver在onCreate方法中注册,它应该在onPause方法中注销。在onPause方法内我的Log.w()调用使我相信正在调用unregisterReceiver()方法,但我仍然得到这个异常。Android:泄露的IntentReceiver异常正在抛出,即使我打电话unregisterReceiver
有什么想法?
private PlayerReceiver playerReceiver;
public void onCreate(Bundle savedInstanceState) {
...
IntentFilter playerFilter;
playerReceiver = new PlayerReceiver();
playerFilter = new IntentFilter(PlayerService.BUFFERING_FAILURE);
playerFilter.addAction(PlayerService.BUFFERING_SUCCESS);
registerReceiver(playerReceiver, playerFilter);
...
}
protected void onPause() {
...
if (playerReceiver != null){
unregisterReceiver(playerReceiver);
Log.w(TAG, "playerReceiver has been unregistered");
playerReceiver = null;
}
...
}
public class PlayerReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(PlayerService.BUFFERING_FAILURE)){
setListenButton(false);
}
closePlayDialog();
}
}
logcat的输出
08-26 11:44:28.646: WARN/WWOZMain(1058): playerReceiver has been unregistered
08-26 11:44:29.476: ERROR/ActivityThread(1058): Activity org.wwoz.WWOZMain has leaked IntentReceiver [email protected] that was originally registered here. Are you missing a call to unregisterReceiver()?
08-26 11:44:29.476: ERROR/ActivityThread(1058): android.app.IntentReceiverLeaked: Activity org.wwoz.WWOZMain has leaked IntentReceiver [email protected] that was original
LY这里注册。你是否错过了对unregisterReceiver()的调用?
通常你应该在'onResume'中注册并在'onPause'(或'onStart'和'onStop')注销。因此,在活动恢复时,您可能会多次取消注册,而无需重新注册。这看起来与您遇到的问题相反,但我猜它可能仍会触发相同的日志警告? – 2010-08-26 22:35:28
啊!谢谢克里斯托弗。我甚至没有注意到我在'onCreate'和'onResume'中注册接收器的事实。相反,我注册了两次,只注销一次。卫生署! – 2010-08-27 00:34:47