Nie rozumiem, dlaczego otrzymuję ten wyjątek po naciśnięciu przycisku wstecz. Mam IntentReceiver zarejestrowany w metodzie onCreate i powinien zostać wyrejestrowany w metodzie onPause. Wywołanie funkcji My Log.w() w metodzie onPause prowadzi mnie do przekonania, że wywoływana jest metoda unregisterReceiver(), ale otrzymuję ten wyjątek.Android: Wyrzucany wyjątek IntentReceiver wyrzucany, mimo że wywoływam unregisterReceiver
Jakieś myśli?
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 Wyjście
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 tu zarejestrowany. Czy brakuje połączenia z wyrejestrowaniemReceiver()?
Generalnie powinieneś zarejestrować się w 'onResume' i wyrejestrować w' onPause' (lub 'onStart' i' onStop'). Możliwe, że wielokrotnie rejestrujesz się bez ponownej rejestracji po wznowieniu aktywności. Co wydaje się być przeciwieństwem problemu, który masz, ale wydaje mi się, że może nadal wywoływać to ostrzeżenie? –
Argh! Dzięki Christopher. Nie zwracałem nawet uwagi na to, że rejestrowałem odbiornik zarówno w "onCreate", jak i 'onResume'. Zamiast tego zarejestrowałem się dwa razy i tylko raz wyrejestrowałem. Doh! –