保活测试步骤概述
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+后获取不到系统进程的,只能获取自己的进程。