Похоже, это один из самых сложных вопросов в Android, поскольку (на момент написания статьи) Android не имеет эквивалентов iOS для обратных вызовов applicationDidEnterBackground()
или applicationWillEnterForeground()
.Я использовал AppState Library , который был составлен с помощью @ jenzz .
[AppState - это] простая, реагирующая библиотека Android на основе RxJava, которая отслеживает изменения состояния приложения.Он уведомляет подписчиков каждый раз, когда приложение переходит в фоновый режим и возвращается на передний план.
Оказалось, это именно то, что мне нужно, особенно потому, что в моем приложении было несколько действий, поэтому просто проверял onStart()
или onStop()
на деятельности не собирался сокращать это.
Сначала я добавил эти зависимости в gradle:
dependencies {
compile 'com.jenzz.appstate:appstate:3.0.1'
compile 'com.jenzz.appstate:adapter-rxjava2:3.0.1'
}
Затем было просто добавить эти строки в соответствующее место в вашем коде:
//Note that this uses RxJava 2.x adapter. Check the referenced github site for other ways of using observable
Observable<AppState> appState = RxAppStateMonitor.monitor(myApplication);
//where myApplication is a subclass of android.app.Application
appState.subscribe(new Consumer<AppState>() {
@Override
public void accept(@io.reactivex.annotations.NonNull AppState appState) throws Exception {
switch (appState) {
case FOREGROUND:
Log.i("info","App entered foreground");
break;
case BACKGROUND:
Log.i("info","App entered background");
break;
}
}
});
В зависимости от того, как вы подписываетесь на заметку, вам, возможно, придется отказаться от нее, чтобы избежать утечек памяти.Снова больше информации на странице github .