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、エラーが発生します。

アクティビティ.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 に答える