保活测试步骤概述
1.结束指定应用进程
2.获取系统进程列表,找出pid在进程结束执行前后是否一致
代码概要
结束进程代码
shellExec("am force-stop " + package);
public static StringBuffer shellExec(String cmd) {
Runtime runtime = Runtime.getRuntime();
StringBuffer mRespBuff = new StringBuffer();
try {
Process process = runtime.exec(cmd);
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
char[] buff = new char[1024];
int ch = 0;
while ((ch = reader.read(buff)) != -1) {
mRespBuff.append(buff, 0, ch);
}
reader.close();
return mRespBuff;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
========或==========
private void killProcess(int pid) {
android.os.Process.killProcess(pid);
//android.os.Process.killProcess(android.os.Process.myPid() ); //杀死进程
}
获取系统进程列表
shellExec(ps);
public static StringBuffer shellExec(String cmd) {
Runtime runtime = Runtime.getRuntime();
StringBuffer mRespBuff = new StringBuffer();
try {
Process process = runtime.exec(cmd);
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
char[] buff = new char[1024];
int ch = 0;
while ((ch = reader.read(buff)) != -1) {
mRespBuff.append(buff, 0, ch);
}
reader.close();
return mRespBuff;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
========或==========
/**
* 获取进程集合
*/
private List<String> getProcessList(Context context) {
List<String> resultList = new ArrayList<>();
if (context == null) {
return resultList;
}
List<AndroidAppProcess> mProcessList = AndroidProcesses.getRunningAppProcesses();
for (AndroidAppProcess appProcess : mProcessList) {
resultList.add(appProcess.name);
Log.e("MainActivity", "getProcessList : " + appProcess.name + " :" + appProcess.pid);
if (appProcess.name.equals(packageMaster) || appProcess.name.equals(packageIc) || appProcess.name.equals(packageService)
|| appProcess.name.equals(packageOsupdate) || appProcess.name.equals(packageSystemcommand) || appProcess.name.equals(packageXpaas)) {
killProcess(appProcess.pid);
}
}
return resultList;
}
注意:
1.以上需要先获取系统权限。
2.Runtime.exec();大部分设备获取不到系统进程,可尝试uid和系统进程uid一样。
3.getRunningAppProcesses()在5.1+后获取不到系统进程的,只能获取自己的进程。