No entiendo por qué recibo esta excepción al presionar el botón Atrás. Tengo el IntentReceiver registrado en el método onCreate y se supone que no está registrado en el método onPause. Mi llamada a Log.w() dentro del método onPause me lleva a creer que se está llamando al método unregisterReceiver(), pero todavía recibo esta excepción.Android: la excepción filtrada de IntentReceiver se está lanzando aunque llamo unregisterReceiver
¿Alguna 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 salida
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 aquí registrados. ¿Te estás perdiendo una llamada para anular el registro de Receiver()?
En general, debe registrarse en 'onResume' y anular el registro en' onPause' (o 'onStart' y' onStop'). Por lo tanto, es posible que se registre varias veces sin volver a registrarse cuando se reanude la actividad. ¿Qué parece lo opuesto al problema que estás teniendo, pero supongo que todavía podría desencadenar la misma advertencia de registro? –
Argh! Gracias Christopher. Ni siquiera presté atención al hecho de que estaba registrando el receptor en 'onCreate' y' onResume'. Entonces, en cambio, me estaba registrando dos veces y solo anulé el registro una vez. Doh! –