1. 程式人生 > >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