Действие пропустило IntentReceiver, который был первоначально зарегистрирован здесь. Вы пропускаете звонок к unregisterReceiver ()?

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()?

Какова причина вышеупомянутой ошибки? Как этого можно избежать?

62
задан 16 January 2013 в 15:45

3 ответа

Только для добавления к ответам выше при регистрации получателя в на onCreate это должно быть не зарегистрировано в onDestroy. при регистрации получателя на onResume необходимо не зарегистрировать его в onPause.

помнить то, где Вы регистрируете и не регистрируете получатель, например, при регистрации получателя в onCreate (Пакет) с помощью контекста действия необходимо не зарегистрировать его в onDestroy () для предотвращения утечки получателя из контекста действия. При регистрации получателя в onResume (), необходимо не зарегистрировать его в onPause () для предотвращения регистрации его многократно (Если Вы не хотите получать широковещательные сообщения при приостановке, и это может сократить ненужную систему наверху). Не не регистрируйтесь в onSaveInstanceState (Пакет), потому что это не называют, если пользователь пятится в стопке истории.

Источник

4
ответ дан 31 October 2019 в 14:03

Удостоверьтесь, что получатель регистрируется перед нерегистрацией его. чтобы сделать это, объявите булевскую переменную

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.
    }
}
2
ответ дан 31 October 2019 в 14:03

Не зарегистрируйтесь Ваш получатель на onStop () является действительным ответом. Не называйте его на onPause () методом.

@Override
protected void onStop()
{
    unregisterReceiver(yourReceiverName);
    super.onStop();
}
2
ответ дан 31 October 2019 в 14:03

Другие вопросы по тегам:

Похожие вопросы: