我想杀死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);
}
Run Code Online (Sandbox Code Playgroud)
那么我在代码中哪里犯了错误?有什么帮助吗?
has*_*ian 21
Process.killProcess(int pid)用来杀死UID与您的应用程序具有相同的进程.ActivityManager.killBackgroundProcesses(String packageName)与KILL_BACKGROUND_PROCESSES在您的清单许可(对于API> = 8)或ActivityManager.restartPackage (String packageName)(用于API <8)杀指定过程中,除forground过程. 因此,如果您在程序是前台进程时要杀死所有其他进程,您将使用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);
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码段中,每个进程都将被终止,除非它是您的应用程序或系统进程的进程.
参考:
如何从我的Android应用程序关闭所有活动的应用程序?
任务杀手如何运作?
如果设备已植根(具有超级用户权限),您还有另一种可能性.
您可以调用将使用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!
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31304 次 |
| 最近记录: |