1

在我的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() 的调用?

我该如何解决?谢谢。

4

3 回答 3

2

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

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

}

希望这对您有所帮助。

于 2012-10-29T09:57:57.500 回答
0

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

于 2012-10-29T09:55:09.623 回答
0

您需要注销广播接收器。

OnDestroy()在您的方法中添加这一行:unregisterReceiver(myReceiver);

于 2012-10-29T09:56:01.277 回答