有时候客户app通过recent杀掉之后,还有线程在运行,根本杀不掉,客户又想彻底杀掉这些线程,下面展示一种简单易行的方法,就是在杀死app的recent键时候,把app变成停止运行,这样app所有的子进程就彻底歇菜了,想要运行的时候直接点击app启动就好了。
补丁如下:
Index: frameworks/base/services/core/java/com/android/server/am/ProcessRecord.java
===================================================================
--- frameworks/base/services/core/java/com/android/server/am/ProcessRecord.java (revision 506)
+++ frameworks/base/services/core/java/com/android/server/am/ProcessRecord.java (working copy)
@@ -51,6 +51,8 @@
import java.io.PrintWriter;
import java.util.ArrayList;
+import java.io.*;
+import android.util.Log;
/**
* Full information about a particular process that
@@ -596,9 +598,32 @@
}
}
}
+ public static void exe_cmd(String cmd){
+ java.lang.Process process2 = null;
+ DataOutputStream dos = null;
+ try{
+ process2 = Runtime.getRuntime().exec("su");
+ dos = new DataOutputStream(process2.getOutputStream());
+ dos.writeBytes(cmd);//"input keyevent 26");
+ dos.flush();
+ dos.close();
+ }
+ catch (Exception e) {
+
+ e.printStackTrace();
+}
+ }
+
void kill(String reason, boolean noisy) {
- if (!killedByAm) {
+ Log.i("fan","kill-process");
+ if(toShortString().contains("cn.pindao.saas.app.maker"))
+ {
+ exe_cmd("am force-stop cn.pindao.saas.app.maker");
+ Log.i("fan","kill-process cn.pindao.saas.app.maker ok");
+ }
+
+ if (!killedByAm) {
Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "kill");
if (noisy) {
Slog.i(TAG, "Killing " + toShortString() + " (adj " + setAdj + "): " + reason);