窗口小部件。活动已泄露IntentReceiver

时间:2012-10-29 09:47:59

标签: android android-intent android-widget broadcastreceiver android-service

Widget我使用:

Intent intent = new Intent(context, ClassForWidget.class); 
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); 
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget1);            
views.setOnClickPendingIntent(R.id.layout_widget1, pendingIntent);`

我的班级ClassForWidget已经有BroadcastReceiver

BroadcastReceiver myReceiver = new MyReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(MyService.MY_ACTION);
registerReceiver(myReceiver, intentFilter);

所以,当我点击Widget时,我有错误:

  

Activity .ClassForWidget泄露了IntentReceiver   最初注册的.ClassForWidget $ MyReceiver @ 40ebe710   这里。你是否错过了对unregisterReceiver()的调用?

我该如何解决?感谢。

3 个答案:

答案 0 :(得分:2)

通常你应该在onResume上注册并在onPause(或onStart和onStop)中取消注册。

protected void onPause() {
     if (myReceiver != null){
         unregisterReceiver(myReceiver);
         myReceiver = null;
     }

}

希望这会对你有所帮助。

答案 1 :(得分:0)

我相信,您需要调用unregisterReceiver()方法才能取消注册广播接收器。我不确定你是如何为小部件做的,但如果是Activity,我们通常需要在onStop()内调用它。

答案 2 :(得分:0)

您需要取消注册广播接收器。在OnDestroy()方法中添加此行:unregisterReceiver(myReceiver);