Android: как узнать, когда приложение входит или "фоновый" режим?

Я пытаюсь выполнить следующие действия с Android:

  • когда приложение находится в фоновом режиме, поток периодически проверяет сервер на получение данных и уведомляет пользователя о наличии новых данных. Я использую Сервис для этого, отлично.

  • когда приложение находится в "активном" использовании, то есть одно из его действий видимо, опрос должен останавливаться, поскольку это может мешать другим действиям пользователя.

Я не понимаю, как определить переход между "активным" или "фоновым" использованием приложения. Методы активности onResume(), похоже, не помогают, так как активность может быть скрыта или видима во время "активного" использования в любом случае. Я понимаю, что само приложение не делает разницы между двумя состояниями.
Может ли быть связано с нажатием кнопки HOME? Есть ли другой способ сделать различие?
Я думаю об эквиваленте метода делегата iPhone app applicationDidEnterBackground. Это правильный способ думать с Android? Или я должен использовать другой подход?

Спасибо.

Ответ 1

Я расскажу о Activity Lifecycle. Между onResume и onPause ваш Activity является "активным", т.е. На экране, и пользователь может взаимодействовать с ним. Если вы вызываете ваш метод onPause, вы должны предположить, что он больше не "активен", и пользователь больше не может взаимодействовать с ним, пока не будет вызван onResume. Если вы хотите отслеживать это в своем сервисе, вам придется делать это вручную.

Это, вероятно, наиболее легко достигается путем вызова метода в вашей службе в Activity#onResume, который увеличивает счетчик или устанавливает флаг и в onPause возвращает это изменение. Если у вас несколько видов деятельности, вам, скорее всего, понадобится счетчик, возможно, AtomicInteger, и используйте его, чтобы определить, когда вы должны возобновить опрос.

Я бы подождал немного времени, когда счетчик достигнет 0, перепроверьте его, и если он еще 0 возобновит опрос. Это будет объяснять разрыв между одним действием onPause и другим onResume.