Обнаружение состояния возобновления и приостановки приложения Android

#android #android-lifecycle

#Android #android-жизненный цикл

Вопрос:

Я хочу запустить ScheduledExecutorService при возобновлении работы приложения и хочу остановиться на паузе приложения.

Я нашел решение, только обнаружив статус выполнения активности, поддерживая счетчик. Как в lib https://github.com/curioustechizen/android-app-pause/tree/master/android-app-pause .

Есть ли какое-либо другое решение для определения состояния приостановки и возобновления приложения?

Ответ №1:

Вы должны использовать ProcessLifecycleOwner.

Класс, который обеспечивает жизненный цикл для всего процесса подачи заявки.

Вы можете рассматривать этот LifecycleOwner как совокупность всех ваших действий, за исключением того, что ON_CREATE будет отправлен один раз, а ON_DESTROY никогда не будет отправлен. Другие события жизненного цикла будут отправляться со следующими правилами: ProcessLifecycleOwner будет отправлять события ON_START, ON_RESUME по мере того, как первое действие проходит через эти события. ON_PAUSE, ON_STOP, события будут отправляться с задержкой после последнего действия, пройденного через них. Эта задержка достаточно велика, чтобы гарантировать, что ProcessLifecycleOwner не отправит никаких событий, если действия будут уничтожены и воссозданы из-за изменения конфигурации.

Это полезно в тех случаях, когда вы хотите реагировать на то, что ваше приложение выходит на передний план или переходит на задний план, и вам не нужна точность в миллисекунды для получения событий жизненного цикла.

Реализация

Шаг 1. Создайте класс с именем MyApp , которое расширяется от класса Application.

 public class MyApp extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        ProcessLifecycleOwner.get()
                .getLifecycle()
                .addObserver(new ProcessLifecycleObserver());
    }

    private static final class ProcessLifecycleObserver implements LifecycleObserver {

        @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
        public void onApplicationResumed() {
            // Start ScheduledExecutorService here
        }

        @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
        public void onApplicationPaused() {
            // Stop ScheduledExecutorService here
        }
    }
}
 

Шаг 2. Добавьте класс в AndroidManifest.xml файл

 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.kotlinapp">

    <application
        android:name=".MyApp"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>