如何杀死Android中当前正在运行的任务
我正在尝试在android中构build一个任务杀手types的应用程序。 我可以使用ActivityManager显示当前正在运行的任务的列表,但在执行任务时遇到问题。
这是我正在做什么来获得当前正在运行的任务列表:
ActivityManager am = (ActivityManager) context. getSystemService(Activity.ACTIVITY_SERVICE); List<RunningTaskInfo> a=am.getRunningTasks(Integer.MAX_VALUE); PackageManager pack=this.getPackageManager(); for(int i=0;i<a.size();i++){ String packageName = a.get(i).topActivity.getPackageName(); Drawable d=null; String appName=""; try { d=pack.getApplicationIcon(packageName); appName=(String) pack.getApplicationLabel(pack.getApplicationInfo(packageName,PackageManager.GET_META_DATA)); } catch (NameNotFoundException e) { e.printStackTrace(); } packName.add(packageName); //arraylist of package name apps.add(appName); // arraylist of app name icons.add(d); //arraylist of icons }
它为我工作但现在,因为我试图杀死任务使用killBackgroundProcesses:
am.killBackgroundProcesses(package name);
它不起作用 。 此外, killBackgroundProcesses方法在API级别2.2中可用,那么我如何在以前的API级别执行相同的任务,如1.6等
有没有其他的方式来显示当前活动的应用程序,并杀死他们。
请帮忙 。
非常感谢。
没有人可以杀死除了Android操作系统本身的进程。
Android市场上的大多数任务杀手都不会杀死他们刚刚重启进程的应用程序
通过使用
public void restartPackage (String packageName)
当您的活动调用此方法时,操作系统立即调用
savedInstanceState
并保存您想要杀死的活动的状态。 现在这个过程是
从内存中删除和操作系统保存状态。现在当下一次用户启动该活动它
将从死亡的地方开始,换句话说就是重新开始。 你可以从任何validation
任务pipe理器,他们不杀死进程,因为没有人可以这样做。 这个方法也是
在ICS工作。
对于上面的方法你可以看看这里 。 据我所知killBackgroundProcesses (String packageName)
是为API 8及以上。
简而言之,自动任务杀手通过轮询操作系统来查找当前正在运行的进程和正在使用的内存列表。 然后,无论是使用智能algorithm还是使用用户input,“任务杀手”都会向系统发出一个呼叫,通知系统终止进程。 有两个apis你可以做到这一点。
他们是
- Process.sendSignal(pid,Process.SIGNAL_KILL);
- ActivityManager.killBackgroundProcesses(包名)
这首先通过调用Process.killProcess(int pid)来工作,其中pid是特定进程的唯一标识符。 Android以与linux相同的方式杀死进程; 但是,用户只能杀死他们拥有的进程。 在Android中,每个应用程序都运行一个唯一的UID,用户ID。 所以使用这个API一个应用程序只能杀死自己的进程,因此在Process.killProcess(int pid)文档中的以下解释:
用给定的PID来杀死进程。 请注意,尽pipe这个API允许我们根据PID来请求终止任何进程,但是内核仍然会对你实际上能够杀死的PID施加标准的限制。 通常这意味着只有运行调用者的包/应用程序的进程以及由该应用程序创build的任何附加进程; 共享一个通用UID的软件包也将能够杀死对方的进程。
当调用这个方法时, 信号由OS生成并设置为进程。 每当一个进程收到来自操作系统的信号,它必须处理该信号或立即死亡。 SIG_KILL
等信号无法处理,导致收件人程序立即死亡。 如果你想杀死你没有特权杀死的进程,也就是说你的进程不是你的进程,那么你必须使用sudo提升你的特权(这将需要设备上的root权限)。
第二个API的工作原理是告诉ActivityManager
你要终止与特定Package相关的进程。 这个API绕过了你的UID来匹配进程的UID,因为它需要用户接受KILL_BACKGROUND_PROCESSES权限。 此权限通知操作系统一个应用程序已被用户认可为任务杀手。 当一个任务杀手想要杀死一个应用程序,它告诉操作系统来解决只能杀死你自己的进程的问题。
在Android文档中,它说这个API实际上使用了第一个Process.killProcess API
让系统立即杀死与给定软件包相关的所有后台进程。 这与内核杀死这些进程来回收内存是一样的; 系统会根据需要在将来重新启动这些进程。
希望它有助于。
您是否在清单文件中input了下面的权限?
<uses-permission android:name="android.permission.GET_TASKS"/> <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"/>
- 如何检测Android中的布局方向变化?
- 名称为的FirebaseApp不存在
- 如何清理Eclipse的Intellij思想中的项目caching清洁?
- 将一个库/ JAR添加到Eclipse Android项目中
- Android GCM:相同的发件人ID更多的应用程序
- Android-如何将android.net.Uri对象转换为java.net.URI对象?
- 错误:BinderProxy @ 45d459c0无效; 你的活动正在运行?
- 包括Google Play服务库时,为什么权限会自动添加到我的AndroidManifest中
- Android客户端的AccountManager中的AuthToken不再工作