下面这两种方式都可以,但是有区别,
例如用户在APP中,过了会屏幕变暗了,此时activity 只是onstop(因为不可见了),但是不会执行ondestroy,
此时按照第一种方式,返回的就是true,表明正在运行
第二种方式返回的也是true,因为数量为0了,此时表明在后台
另外一点,如果是系统设置界面覆盖APP,发现都是表明APP正在运行中,可能是因为设置页就是相当于一个dialog,不会引起activity 生命周期的变化吧
public boolean isAppRunning(Context context) {
try {
ActivityManager manager = (ActivityManager) context
.getSystemService(Context.ACTIVITY_SERVICE);
ActivityManager.RunningTaskInfo info = manager.getRunningTasks(1).get(0);
return info != null && info.topActivity != null && info.topActivity.getPackageName().equals(getApplicationContext().getPackageName());
} catch (Throwable e) {
}
return false;
}
2.
ActivityLifecycleCallbacks
/** * 判断当前APP是否在运行中,mActivityCount=0,表明APP不在 * @return */ public boolean appOnBackGround(){ if (mActivityCount == 0){ return true; }else { return false; } }