2013-07-25 1 views
18

В классе приложений Android вы можете зарегистрировать/отменить регистрацию ActivityLifecycleCallbacks, что позволит вам отслеживать события жизненного цикла активности в приложении все в одном месте (если вы этого желаете).Каков правильный способ отмены регистрации обратных вызовов жизненного цикла активности?

Адрес для корреспонденции: unregisterActivityLifecycleCallbacks? Я регистрация в onCreate, и думаю, что OnTerminate бы надлежащее место только от имени методы, но документы говорят для OnTerminate():

Этого метод предназначен для использования в условиях эмулировать процесс , Это никогда не будет вызвано на производственном устройстве Android, где процессы удаляются , просто убивая их; ни один код пользователя (включая этот обратный вызов) не является , выполняемым при этом.

Я не вижу других методов в классе Application, где выполняется обратный вызов типа «shutdown». Вам даже нужно отменить регистрацию?

+0

Мне действительно интересно узнать, чего вы пытаетесь достичь. Что касается отмены регистрации, вам не понадобится, поскольку, если ваш класс приложения умирает, ваш процесс умирает, поэтому вы должны отменить регистрацию, предположительно после вызова super(), за несколько микросекунд до того, как ваш процесс умрет. Я предполагаю, что целью отмены регистрации является возможность изменить поведение во время выполнения. – Simon

ответ

18

Simon был прав об этом. registerActivityLifecycleCallbacks не требует соответствующего вызова unregisterActivityLifecycleCallbacks. Как описано в this SO question, вы не можете обнаружить, когда ваше приложение убито. Таким образом, нет никакого «логического» места для отмены регистрации вашего обратного вызова. И даже если был, ваш Application экземпляр убит после происходит последнее действие Activity, и убийство вашего Application убивает список mActivityLifecycleCallbacks, который в любом случае содержит ссылку на ваш обратный вызов.

TL; DR - Не беспокойтесь о вызове unregisterActivityLifecycleCallbacks, это только там, если вы хотите прекратить отслеживание Activity действий во время обычного жизненного цикла Application.