1.判断应用是否在后台运行(两种方式)
/**
* 判断程序是否在后台
* @param context
* @return
*/
public static boolean isBackground(Context context) {
ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo appProcess : appProcesses) {
if (appProcess.processName.equals(context.getPackageName())) {
if (appProcess.importance != ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
return true;
} else {
return false;
}
}
}
return false;
}
或者
public static boolean isApplicationInBackground(Context context) {
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> taskList = am.getRunningTasks(1);
if (taskList != null && !taskList.isEmpty()) {
ComponentName topActivity = taskList.get(0).topActivity;
if (topActivity != null && !topActivity.getPackageName().equals(context.getPackageName())) {
return true;
}
}
return false;
}
2.判断进程是否在主进程
public static boolean isMainProcess(Context context) {
if (context == null) {
return false;
}
String packageName = context.getApplicationContext().getPackageName();
String processName = getProcessName(context);
return packageName.equals(processName);
}
public static String getProcessName(Context context) {
String processName = getProcessFromFile();
if (processName == null) {
// 如果装了xposed一类的框架,上面可能会拿不到,回到遍历迭代的方式
processName = getProcessNameByAM(context);
}
return processName;
}
private static String getProcessFromFile() {
BufferedReader reader = null;
try {
int pid = android.os.Process.myPid();
String file = "/proc/" + pid + "/cmdline";
reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "iso-8859-1"));
int c;
StringBuilder processName = new StringBuilder();
while ((c = reader.read()) > 0) {
processName.append((char) c);
}
return processName.toString();
} catch (Exception e) {
return null;
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
private static String getProcessNameByAM(Context context) {
String processName = null;
ActivityManager am = ((ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE));
if (am == null) {
return null;
}
while (true) {
List<ActivityManager.RunningAppProcessInfo> plist = am.getRunningAppProcesses();
if (plist != null) {
for (ActivityManager.RunningAppProcessInfo info : plist) {
if (info.pid == android.os.Process.myPid()) {
processName = info.processName;
break;
}
}
}
if (!TextUtils.isEmpty(processName)) {
return processName;
}
try {
Thread.sleep(100L); // take a rest and again
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
}
网友评论