public class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
registerActivityLifecycleCallbacks(new MyLifecycleHandler());
}
private static int resumed;
private static int stopped;
public class MyLifecycleHandler implements ActivityLifecycleCallbacks {
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
}
public void onActivityDestroyed(Activity activity) {
}
public void onActivityResumed(Activity activity) {
++resumed;
}
public void onActivityPaused(Activity activity) {
}
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
public void onActivityStarted(Activity activity) {
}
public void onActivityStopped(Activity activity) {
++stopped;
}
}
public static boolean isApplicationInForeground() {
return resumed > stopped;
}
}
这种方式,在休眠时也会认为app已不可见,这算是一点小遗憾。另外,网上很多方式是使用
/**
* 程序是否在前台运行
* @return
*/
public boolean isAppOnForeground(String packageName) {
// Returns a list of application processes that are running on the device
List<RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses();
if (appProcesses == null) return false;
for (RunningAppProcessInfo appProcess : appProcesses) {
// The name of the process that this object is associated with.
if (appProcess.processName.equals(packageName)
&& appProcess.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
return true;
}
}
return false;
}
这种方式唯一的遗憾是需要特殊权限,
<uses-permission android:name="android.permission.GET_TASKS"/>
所以个人是比较建议第一种方式