Как правильно отменить регистрацию обратных вызовов жизненного цикла Activity?

В классе приложения Android вы можете зарегистрировать или отменить регистрацию ActivityLifecycleCallbacks, которые позволяют вам отслеживать события жизненного цикла Activity в вашем приложении в одном месте (если вы того пожелаете).

Где находится правильное место для вызова отменить регистрациюActivityLifecycleCallbacks? Я регистрируюсь в onCreate и думая, что onTerminate будет подходящим местом только из названия метода, но документы говорят для onTerminate():

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

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


person Christopher Perry    schedule 25.07.2013    source источник
comment
Мне действительно любопытно, чего вы пытаетесь достичь. Что касается отмены регистрации, вам не нужно это делать, поскольку, если ваш класс Application умирает, ваш процесс умирает, поэтому вы должны отменить регистрацию, предположительно, после вызова super(), за несколько микросекунд до того, как ваш процесс умрет. Я предполагаю, что цель отмены регистрации — дать вам возможность изменить поведение во время выполнения.   -  person Simon    schedule 25.07.2013


Ответы (1)


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

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

person bclymer    schedule 25.04.2014