01-16 16:52:42.211: E/ActivityThread(2529): Activity com.Civilcourage.CivilcurageSplash has leaked IntentReceiver com.google.android.gcm.GCMBroadcastReceiver@405282e0 that was originally registered here.
Are you missing a call to unregisterReceiver()?
Какова причина вышеупомянутой ошибки? Как этого можно избежать?
Только для добавления к ответам выше при регистрации получателя в на onCreate это должно быть не зарегистрировано в onDestroy. при регистрации получателя на onResume необходимо не зарегистрировать его в onPause.
помнить то, где Вы регистрируете и не регистрируете получатель, например, при регистрации получателя в onCreate (Пакет) с помощью контекста действия необходимо не зарегистрировать его в onDestroy () для предотвращения утечки получателя из контекста действия. При регистрации получателя в onResume (), необходимо не зарегистрировать его в onPause () для предотвращения регистрации его многократно (Если Вы не хотите получать широковещательные сообщения при приостановке, и это может сократить ненужную систему наверху). Не не регистрируйтесь в onSaveInstanceState (Пакет), потому что это не называют, если пользователь пятится в стопке истории.
Удостоверьтесь, что получатель регистрируется перед нерегистрацией его. чтобы сделать это, объявите булевскую переменную
private boolean isReceiverRegistered = false;
затем прямо после вызова registerReceiver () метод, установите флаг isReceiverRegistered
на истинный как показано в ниже фрагмента кода
registerReceiver(broadcastReceiver, new IntentFilter("anyString"));
isReceiverRegistered = true;
затем, в onPause()
@Override
protected void onPause() {
super.onPause();
if(isReceiverRegistered){
unregisterReceiver(broadcastReceiver);
isReceiverRegistered = false;// set it back to false.
}
}
Не зарегистрируйтесь Ваш получатель на onStop () является действительным ответом. Не называйте его на onPause () методом.
@Override
protected void onStop()
{
unregisterReceiver(yourReceiverName);
super.onStop();
}