#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>