Android: как узнать, когда приложение входит или "фоновый" режим?
Я пытаюсь выполнить следующие действия с Android:
-
когда приложение находится в фоновом режиме, поток периодически проверяет сервер на получение данных и уведомляет пользователя о наличии новых данных. Я использую Сервис для этого, отлично.
-
когда приложение находится в "активном" использовании, то есть одно из его действий видимо, опрос должен останавливаться, поскольку это может мешать другим действиям пользователя.
Я не понимаю, как определить переход между "активным" или "фоновым" использованием приложения. Методы активности onResume(), похоже, не помогают, так как активность может быть скрыта или видима во время "активного" использования в любом случае. Я понимаю, что само приложение не делает разницы между двумя состояниями.
Может ли быть связано с нажатием кнопки HOME? Есть ли другой способ сделать различие?
Я думаю об эквиваленте метода делегата iPhone app applicationDidEnterBackground
. Это правильный способ думать с Android? Или я должен использовать другой подход?
Спасибо.
Ответы
Ответ 1
Я расскажу о Activity
Lifecycle. Между onResume
и onPause
ваш Activity
является "активным", т.е. На экране, и пользователь может взаимодействовать с ним. Если вы вызываете ваш метод onPause
, вы должны предположить, что он больше не "активен", и пользователь больше не может взаимодействовать с ним, пока не будет вызван onResume
. Если вы хотите отслеживать это в своем сервисе, вам придется делать это вручную.
Это, вероятно, наиболее легко достигается путем вызова метода в вашей службе в Activity#onResume
, который увеличивает счетчик или устанавливает флаг и в onPause
возвращает это изменение. Если у вас несколько видов деятельности, вам, скорее всего, понадобится счетчик, возможно, AtomicInteger
, и используйте его, чтобы определить, когда вы должны возобновить опрос.
Я бы подождал немного времени, когда счетчик достигнет 0, перепроверьте его, и если он еще 0 возобновит опрос. Это будет объяснять разрыв между одним действием onPause
и другим onResume
.