在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()的调用?
我该如何解决?感谢。
答案 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);