1

在我Widget我使用:小工具。活動已泄漏IntentReceiver

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 has leaked IntentReceiver [email protected] that was originally registered here. Are you missing a call to unregisterReceiver()?

我該如何解決?謝謝。

+0

在註銷您的接收器之前,您的活動正在死亡 – sachy

回答

0

我相信,你需要調用unregisterReceiver()方法來取消註冊廣播接收器。我不知道你是如何做的小部件,但如果它是一個Activity,所以我們通常需要在onStop()內調用。

0

您需要取消註冊braodcast接收器。

OnDestroy()方法添加此行:unregisterReceiver(myReceiver);

2

一般來說,你應該在註冊的onResume和的onPause(或在onStart和的onStop)註銷。

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

} 

希望這可以幫助你。