方法一:
在自己定义的Application中定义一个boolean类型的变量,一个参数为boolean类型的设置是否为前台运行的方法
public static boolean isForeground = false; public static void setRunForeground(boolean isFore){ isForeground = isFore; }
在基类Activity中调用onResume()、onPause(),这样每个继承自该基类的Activity在显示和停止时都会设置该应用的运行状态
@Override protected void onResume() { super.onResume(); App.setRunForeground(true); } @Override protected void onPause() { super.onPause(); App.setRunForeground(false); }
当要判断应用运行在前台还是后台时,只需取Application中的变量就可以了,true为前台,false为后台
App.isForeground
方法二:
package com.inszb.ycc.service; import android.app.Activity; import android.app.Application; import android.os.Bundle; /** * Created by Administrator on 2017/3/7 0007. */ public class MyLifecycleHandler implements Application.ActivityLifecycleCallbacks { private static int resumed; private static int paused; private static int started; private static int stopped; @Override public void onActivityCreated(Activity activity, Bundle savedInstanceState) { } @Override public void onActivityStarted(Activity activity) { ++started; } @Override public void onActivityResumed(Activity activity) { ++resumed; } @Override public void onActivityPaused(Activity activity) { ++paused; android.util.Log.w("test", "application is in foreground: " + (resumed > paused)); } @Override public void onActivityStopped(Activity activity) { ++stopped; android.util.Log.w("test", "application is visible: " + (started > stopped)); } @Override public void onActivityDestroyed(Activity activity) { } @Override public void onActivitySaveInstanceState(Activity activity, Bundle outState) { } public static boolean isApplicationVisible() { return started > stopped; } public static boolean isApplicationInForeground() { // 当所有 Activity 的状态中处于 resumed 的大于 paused 状态的,即可认为有Activity处于前台状态中 return resumed > paused; } }
记得在Application的onCreat()方法中注册
registerActivityLifecycleCallbacks(new MyLifecycleHandler());
MyLifecycleHandler.isApplicationInForeground();// 判断应用是否在前台运行