В случаях, когда нам нужно проверить из нашего собственного сервиса / background-thread, находится ли наше приложение на переднем плане или нет. Вот как я его реализовал, и он отлично подходит для меня:
public class TestApplication extends Application implements Application.ActivityLifecycleCallbacks {
public static WeakReference<Activity> foregroundActivityRef = null;
@Override
public void onActivityStarted(Activity activity) {
foregroundActivityRef = new WeakReference<>(activity);
}
@Override
public void onActivityStopped(Activity activity) {
if (foregroundActivityRef != null && foregroundActivityRef.get() == activity) {
foregroundActivityRef = null;
}
}
// IMPLEMENT OTHER CALLBACK METHODS
}
Теперь, чтобы проверить из других классов, находится ли приложение на переднем плане или нет, просто вызовите:
if(TestApplication.foregroundActivityRef!=null){
// APP IS IN FOREGROUND!
// We can also get the activity that is currently visible!
}