Возможно, будет слишком поздно, чтобы ответить, но если кто-то приходит в гости, вот решение, которое я предлагаю,
Причина (-ы) в том, что приложение хочет знать, что он находится в фоновом режиме или выходит на передний план, может быть много, некоторые из них,
1. Показывать тосты и уведомления, когда пользователь находится в BG.
2. Для выполнения некоторых задач пользователь впервые приходит из BG, например, опрос, перерисовка и т. Д.
Решение Идолона и других заботится о первой части, но не о второй. Если в вашем приложении несколько действий, и пользователь переключается между ними, то к тому времени, когда вы выполняете второе действие, видимый флаг станет ложным. Поэтому его нельзя использовать детерминистически.
Я сделал что-то, что было предложено CommonsWare: «Если Служба определит, что никаких видимых действий нет, и это останется таким в течение некоторого времени , остановите передачу данных при следующей логической остановке. точка «.
Строка, выделенная жирным шрифтом, важна, и ее можно использовать для достижения второго пункта. Так что я делаю, как только я получаю onActivityPaused (), я не изменяю видимое на false напрямую, вместо этого имею таймер в 3 секунды (это максимум, что должно быть запущено следующее действие), и если нет onActivityResumed ( ) в ближайшие 3 секунды измените видимость на ложь.
Аналогично в onActivityResumed (), если есть таймер, я отменяю его.
Подводя итог, видимым становится isAppInBackground.
Извините, не могу скопировать и вставить код ...