我想杀死android .so中所有正在运行的应用程序,为此任务,我实现了以下代码。但它没有用.App仍然在运行。
ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
for (RunningAppProcessInfo service : manager.getRunningAppProcesses()) {
Log.i("process name " , service.processName);
android.os.Process.killProcess(service.pid);
}
那么我在代码中犯了什么错误? 有什么帮助吗?
答案 0 :(得分:21)
Process.killProcess(int pid)
来杀死与您的应用具有相同UID
的流程。ActivityManager.killBackgroundProcesses(String packageName)
KILL_BACKGROUND_PROCESSES
权限(对于API> = 8)或ActivityManager.restartPackage (String packageName)
(对于API< 8)来杀死指定的进程,但地面过程。 因此,如果您在程序处于前台进程时要杀死所有其他进程,则可以使用ActivityManager.killBackgroundProcesses
或ActivityManager.restartPackage
:
List<ApplicationInfo> packages;
PackageManager pm;
pm = getPackageManager();
//get a list of installed apps.
packages = pm.getInstalledApplications(0);
ActivityManager mActivityManager = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
String myPackage = getApplicationContext().getPackageName();
for (ApplicationInfo packageInfo : packages) {
if((packageInfo.flags & ApplicationInfo.FLAG_SYSTEM)==1)continue;
if(packageInfo.packageName.equals(myPackage)) continue;
mActivityManager.killBackgroundProcesses(packageInfo.packageName);
}
在上面的代码段代码中,除非是您的应用程序或系统进程的处理,否则每个进程都将被终止
参考文献:
How to close all active applications from my Android app?
How do task killers work?
答案 1 :(得分:5)
如果设备已植根(具有超级用户权限),您还有另一种可能性。
您可以调用将使用su权限的外部进程。但请注意,这可能是一个糟糕的设计,因为Android OS应该是唯一一个杀死进程的人。
try {
Process rootProcess = Runtime.getRuntime().exec(new String[] { "su" });
String command = "kill - 9 <pid>";
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(rootProcess.getOutputStream()), 2048);
try {
bw.write(command);
bw.newLine();
bw.flush();
} catch (IOException e) {
// Handle error
}
} catch (Exception e) {
e.printStackTrace();
// Device not rooted!
}
答案 2 :(得分:1)
根据文件enter link description here
请注意,尽管此API允许我们请求终止任何进程 基于其PID,内核仍然会施加标准限制 你实际上能够杀死哪些PID。通常这只意味着 运行调用者的包/应用程序的过程 该应用程序创建的其他流程
我测试它,它只会杀死托管我的App的进程。
答案 3 :(得分:0)
反思强制停止
ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
Method method = Class.forName("android.app.ActivityManager").getMethod("forceStopPackage", String.class);
method.invoke(am, pkgName);
您应该添加此系统权限:
android.permission.FORCE_STOP_PACKAGES