最近在做一个类似与任务管理器的东西,里面有个功能,可以通过这个管理器结束掉其他的进程。
在Android
平
台下,结束进程的方法还是比较多的。首先指明,此处的“结束进程”,包含了结束自身进程和结束其他进程两个方面。通过查阅SDK文档和网上的一些资料,自
己找到一些结束进程的方法。在这里做一些归纳和总结,文章的部分信息有可能来自网上已有的文章和帖子,由于过了比较长时间,所以若发现本文与其他文章雷
同,请谅解。
一、结束一个活动Activity
要主动的结束一个活动Activity,(先强调一下,是结束一个活动,而不是进程)众所周知,肯定是finish方法啦,这个就毋庸置疑了,而且这
个方法最后会调用Activity的生命周期函数onDestroy方法,结束当前的Activity,从任务栈中弹出当前的Activity,激活下一
个Activity。当然其他的finish系列方法,我们不在这里做详细讨论,有兴趣的同学可以自己查阅一下SDK 的文档。
二、强制结束当前的进程
强行结束当前进程有两个方法。(呵呵,这里就是结束进程了)
1、killProcess(int pid)
例子:android.os.Process.killProcess(android.os.Process.myPid());
对于这个方法,需要详细解释一下。在SDK的文档中,解释如下:
Kill the process with the given PID. Note that, though this API allows
us to request to kill any process based on its PID, the kernel will
still impose standard restrictions on which PIDs you are actually able
to kill. Typically this means only the process running the caller's
packages/application and any additional processes created by that app;
packages sharing a common UID will also be able to kill each other's
processes.
英语不好,不能准确翻译,所以希望大家自己理解,免得对大家造成误解。我个人对这句话的解释就是,这个方法使用是有条件的:
a、将被杀掉的进程 和 当前进程 处于同一个包或者应用程序中;
b、将被杀掉的进程 是由当前应用程序所创建的附加进程;
c、将被杀掉的进程 和 当前进程 共享了普通用户的UID。(这里的普通用户,是相对于Root权限的用户来说的)
2、System.exit(int code) 例子:System.exit(0);
该方法只能用于结束当前进程自身,个人觉得在程序遇到异常,无法正常执行时,可以通过这个方法强制退出。
需要注意的是,这两个方法,会导致进程非正常退出,就是说,进程退出时不会去执行onPause、onStop和onDestroy方法,那么进程很有可能错过了保存数据的机会。因此,这两个方法最好使用在出现异常的时候!
三、结束另一个进程
要通过一个进程去结束另一个进程。在之前的SDK版本中,一直使用方法restartPackage(packageName)方法,但是在Android
的开发
文
档中介绍说,这个函数会导致一些问题( the previous behavior here is no longer available to
applications because it allows them to break other applications by
removing their alarms, stopping their services, etc.),所以建议大家使用一个新的方法:
void killBackgroundProcesses(String packageName)
由于这个方法没有返回值,所以我们也不知道我们的目标进程是否真的退出了。但是,我目前只发现了这个可以结束另一个进程的方法。
四、退出到主屏幕(记得是对当前进程的处理)
这个方法,也是退出当前进程的一个方法。如果我们在进程中创建了很多的Activity,但是又不想关闭时去退出不在任务栈顶的Activity,那么就可以直接使用这个方法了。这个方法是通过查阅网上资料看到的。
【按后退键退出
Android
程序
】
功能:当按下返回键时,就返回到主屏幕,并带有参数FLAG_ACTIVITY_CLEAR_TOP,会清理掉当前的活动。
-
@Override
-
public boolean onKeyDown(int keyCode, KeyEvent event) {
-
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { // 按下的如果是BACK,同时没有重复
-
Intent home = new Intent(Intent.ACTION_MAIN);
-
home.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
-
home.addCategory(Intent.CATEGORY_HOME);
-
startActivity(home);
-
}
-
return super.onKeyDown(keyCode, event);
-
}
此方法确实结束了当前进程,但是通过Android平台的App
Manager工具去查看的话,使用2.3.3的模拟器,会发现刚刚被结束的进程会以Cached background
Process的形式存在,并且模拟器给出了解释,说是为了下一次更快捷的启动这个进程。
分享到:
相关推荐
Android应用源码之强行结束APP进程的方法
本文实例讲述了Android结束进程的方法。分享给大家供大家参考,具体如下: 最近在做一个类似与任务管理器的东西,里面有个功能,可以通过这个管理器结束掉其他的进程。 在Android平台下,结束进程的方法还是比较多的...
Android2.2 结束进程forceStopPackage()
安卓Android源码——强行结束APP进程的方法.zip
android 强行结束APP进程的方法.zip
基于android的强行结束APP进程的方法
http://blog.csdn.net/qq_28690547/article/details/50375997;关于demo的文章详解,有兴趣的童鞋可以看看,解决popupwindow/dialog的BadTokenException异常
Android源码_强行结束APP进程的方法
android安卓app如何彻底结束进程. 光调用finish()是结束不了程序的,程序中的线程依旧在后台运行
Android应用源码之强行结束APP进程的方法.zip
对于进程结束在开发APP应用当中还是有必要的,这里整理了三种方法,大家可以根据需求选用。 当应用不再使用时,通常需要关闭应用,可以使用以下三种方法关闭android应用: 第一种方法:首先获取当前进程的id,然后...
Android应用源码之强行结束APP进程的方法.zip项目安卓应用源码下载Android应用源码之强行结束APP进程的方法.zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3.适合公司开发项目技术...
Android应用源码开发Demo,主要用于毕业设计学习。
Android不同于Linux,有一套自己独特的进程管理模块,这个模块有更强的可定制性,可根据“oom_adj”值的范围来决定进程管理策略,比如可以设定“当内存小于X时,结束“oom_adj”大于Y的进程”。 这给了进程管理脚本...
强行结束APP进程
源码参考,欢迎下载