Automatically log Android lifecycle events using ActivityLifecycleCallbacks?
Автоматически регистрировать события жизненного цикла Android с помощью ActivityLifecycleCallbacks?
Я пытаюсь автоматически фиксировать и регистрировать события жизненного цикла Android с помощью ActivityLifecycleCallbacks, однако документации по этому вопросу, мягко говоря, мало:
Я не хочу расширять класс Activity или переопределять существующие методы жизненного цикла (onCreate, onResume и т.д.) Я хочу, чтобы отдельный класс прослушивал эти события и действовал соответствующим образом.
У кого-нибудь есть опыт в этом или есть ссылки на хорошую надежную документацию или руководства о том, как это работает? В частности, как зарегистрироваться для ActivityLifecycleCallbacks и как с ними обращаться?
Переведено автоматически
Ответ 1
У меня нет личного опыта, но, судя по API, вы можете просто написать свой собственный класс, который реализует Application.ActivityLifecycleCallbacks интерфейс, и зарегистрировать этот класс в предоставленном Application экземпляре класса
Этот класс будет получать те же обратные вызовы, что и ваши индивидуальные действия. Удачи.
PS. Кстати, это API 14-го уровня, поэтому на старых телефонах это не сработает.
Ответ 2
Я создал свою собственную реализацию Application.ActivityLifecycleCallbacks. Я использую SherlockActivity, но для обычного класса Activity может сработать.
Во-первых, я создаю интерфейс, в котором есть все методы для отслеживания жизненного цикла действий:
Теперь в logcat вы увидите журналы, запрограммированные в реализации интерфейса, созданной в MyApplication.
Обновить
Эта реализация была протестирована с API 9-го уровня (Gingerbread), API 12-го уровня (Honeycomb) и API 17-го уровня (Jelly Bean) и работает нормально. Может работать в более старых версиях Android.
@Override publicvoidonAppForegroundStateChange(AppForegroundStateManager.AppForegroundState newState) { if (AppForegroundStateManager.AppForegroundState.IN_FOREGROUND.equals(newState)) { // App just entered the foreground. Do something here! Log.i(TAG, "App Just Entered the Foreground with launch mechanism of: " + mLaunchMechanism); } else { // App just entered the background. Set our launch mode back to the default of direct. mLaunchMechanism = LaunchMechanism.DIRECT; } } }
Он также включает советы и рекомендации по определению способа открытия приложения - из уведомления, URL-адреса, открывающего ваше приложение, или непосредственно из меню приложений. Это делается с помощью Enum в классе Application:
В нашей реализации этого у нас есть флаги, указывающие, когда мы запускаем действие, которое запускает стороннее действие, например, если пользователь совершает телефонный звонок из нашего приложения или запускается браузер. Затем при запуске activity onStop() мы выполняем проверку, подобную этой, чтобы сообщать о невидимости activity только тогда, когда эти флаги имеют значение false:
Для проверки того, переходит ли приложение в фоновый режим - например, когда экран устройства гаснет или пользователь получает телефонный звонок - это работает следующим образом: