Android判断应用是否在前台或后台

Android判断应用是否在前台或后台

判断是否前台是否前端显示:

/**
* 判断一个程序是否显示在前端,根据测试此方法执行效率在11毫秒,无需担心此方法的执行效率
*
* @param packageName程序包名
* @param context上下文环境
* @return true--->在前端,false--->不在前端
*/

public static boolean isApplicationShowing(String packageName,
Context context) {
boolean result = false;
ActivityManager am = (ActivityManager) context
.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningAppProcessInfo> appProcesses = am.getRunningAppProcesses();
if (appProcesses != null) {
for (RunningAppProcessInfo runningAppProcessInfo : appProcesses) {
if (runningAppProcessInfo.processName.equals(packageName)) {
int status = runningAppProcessInfo.importance;
if (status == RunningAppProcessInfo.IMPORTANCE_VISIBLE
|| status == RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
result = true;
}
}
}
}
return result;
}

***********************************************************************************

小结:
根据IMOPORTANCE来回收进程的。具体可以去看文档。。

public static final int IMPORTANCE_BACKGROUND = 400//后台

public

可以根据importance的不同来判断前台或后台
RunningAppProcessInfo 里面的常量IMOPORTANCE就是上面所说的前台后台,其实IMOPORTANCE是表示这个app进程的重要性,因为系统回收时候,会 static final int IMPORTANCE_EMPTY = 500//空进程
public static final int IMPORTANCE_FOREGROUND = 100//在屏幕最前端、可获取到焦点 可理解为Activity生命周期的OnResume();
public static final int IMPORTANCE_SERVICE = 300//在服务中
public static final int IMPORTANCE_VISIBLE = 200//在屏幕前端、获取不到焦点可理解为Activity生命周期的OnStart();
判断应用是否在后台:
private boolean isBackgroundRunning() {
String processName = "match.android.activity";

ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
KeyguardManager keyguardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE);

if (activityManager == null) return false;
// get running application processes
List processList = activityManager.getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo process : processList) {
if (process.processName.startsWith(processName)) {
boolean isBackground = process.importance != IMPORTANCE_FOREGROUND && process.importance != IMPORTANCE_VISIBLE;
boolean isLockedState = keyguardManager.inKeyguardRestrictedInputMode();
if (isBackground || isLockedState) return true;
else return false;
}
}
return false;
}
转自karant
阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭