Non capisco perché ottengo questa eccezione quando si preme il pulsante Indietro. Ho IntentReceiver registrato nel metodo onCreate e dovrebbe essere non registrato nel metodo onPause. La mia chiamata Log.w() all'interno del metodo onPause mi porta a credere che venga chiamato il metodo unregisterReceiver(), ma sto ottenendo ancora questa eccezione.Android: È stata generata un'eccezione Leaked IntentReceiver anche se io chiamo unregisterReceiver
Qualche idea?
private PlayerReceiver playerReceiver;
public void onCreate(Bundle savedInstanceState) {
...
IntentFilter playerFilter;
playerReceiver = new PlayerReceiver();
playerFilter = new IntentFilter(PlayerService.BUFFERING_FAILURE);
playerFilter.addAction(PlayerService.BUFFERING_SUCCESS);
registerReceiver(playerReceiver, playerFilter);
...
}
protected void onPause() {
...
if (playerReceiver != null){
unregisterReceiver(playerReceiver);
Log.w(TAG, "playerReceiver has been unregistered");
playerReceiver = null;
}
...
}
public class PlayerReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(PlayerService.BUFFERING_FAILURE)){
setListenButton(false);
}
closePlayDialog();
}
}
LogCat uscita
08-26 11:44:28.646: WARN/WWOZMain(1058): playerReceiver has been unregistered
08-26 11:44:29.476: ERROR/ActivityThread(1058): Activity org.wwoz.WWOZMain has leaked IntentReceiver [email protected] that was originally registered here. Are you missing a call to unregisterReceiver()?
08-26 11:44:29.476: ERROR/ActivityThread(1058): android.app.IntentReceiverLeaked: Activity org.wwoz.WWOZMain has leaked IntentReceiver [email protected] that was original
LY registrati qui. Ti manca una chiamata a unregisterReceiver()?
In genere è necessario registrarsi in "onResume" e annullare la registrazione in "onPause" (o "onStart" e "onStop"). Quindi è possibile che tu stia annullando la registrazione più volte senza una nuova registrazione quando l'attività riprende. Quale sembra l'opposto del problema che stai avendo, ma suppongo che potrebbe comunque attivare lo stesso avviso di registro? –
Argh! Grazie Christopher. Non ho nemmeno prestato attenzione al fatto che stavo registrando il ricevitore sia in "onCreate" che in "onResume". Così, invece, mi sono registrato due volte e ho annullato la registrazione una sola volta. Doh! –