Android结束进程的方法详解
本文实例讲述了Android结束进程的方法。分享给大家供大家参考,具体如下:
最近在做一个类似与任务管理器的东西,里面有个功能,可以通过这个管理器结束掉其他的进程。
在Android平台下,结束进程的方法还是比较多的。首先指明,此处的“结束进程”,包含了结束自身进程和结束其他进程两个方面。通过查阅SDK文档和网上的一些资料,自己找到一些结束进程的方法。在这里做一些归纳和总结,文章的部分信息有可能来自网上已有的文章和帖子,由于过了比较长时间,所以若发现本文与其他文章雷同,请谅解。
一、结束一个活动Activity
要主动的结束一个活动Activity,(先强调一下,是结束一个活动,而不是进程)众所周知,肯定是finish方法啦,这个就毋庸置疑了,而且这个方法最后会调用Activity的生命周期函数onDestroy方法,结束当前的Activity,从任务栈中弹出当前的Activity,激活下一个Activity。当然其他的finish系列方法,我们不在这里做详细讨论,有兴趣的同学可以自己查阅一下SDK的文档。
二、强制结束当前的进程
强行结束当前进程有两个方法。(呵呵,这里就是结束进程了)
1、killProcess(intpid)例子:
android.os.Process.killProcess(android.os.Process.myPid());
对于这个方法,需要详细解释一下。在SDK的文档中,解释如下:
KilltheprocesswiththegivenPID.Notethat,thoughthisAPIallowsustorequesttokillanyprocessbasedonitsPID,thekernelwillstillimposestandardrestrictionsonwhichPIDsyouareactuallyabletokill.Typicallythismeansonlytheprocessrunningthecaller'spackages/applicationandanyadditionalprocessescreatedbythatapp;packagessharingacommonUIDwillalsobeabletokilleachother'sprocesses.
英语不好,不能准确翻译,所以希望大家自己理解,免得对大家造成误解。我个人对这句话的解释就是,这个方法使用是有条件的:
a、将被杀掉的进程和当前进程处于同一个包或者应用程序中;
b、将被杀掉的进程是由当前应用程序所创建的附加进程;
c、将被杀掉的进程和当前进程共享了普通用户的UID。(这里的普通用户,是相对于Root权限的用户来说的)
2、System.exit(intcode)例子:
System.exit(0);
该方法只能用于结束当前进程自身,个人觉得在程序遇到异常,无法正常执行时,可以通过这个方法强制退出。
需要注意的是,这两个方法,会导致进程非正常退出,就是说,进程退出时不会去执行onPause、onStop和onDestroy方法,那么进程很有可能错过了保存数据的机会。因此,这两个方法最好使用在出现异常的时候!
三、结束另一个进程
要通过一个进程去结束另一个进程。在之前的SDK版本中,一直使用方法restartPackage(packageName)方法,但是在Android的开发文档中介绍说,这个函数会导致一些问题(thepreviousbehaviorhereisnolongeravailabletoapplicationsbecauseitallowsthemtobreakotherapplicationsbyremovingtheiralarms,stoppingtheirservices,etc.),所以建议大家使用一个新的方法:
voidkillBackgroundProcesses(StringpackageName)
由于这个方法没有返回值,所以我们也不知道我们的目标进程是否真的退出了。但是,我目前只发现了这个可以结束另一个进程的方法。
四、退出到主屏幕(记得是对当前进程的处理)
这个方法,也是退出当前进程的一个方法。如果我们在进程中创建了很多的Activity,但是又不想关闭时去退出不在任务栈顶的Activity,那么就可以直接使用这个方法了。这个方法是通过查阅网上资料看到的。具体可参考本站文章《Android按后退键退出Android程序的实现方法》
功能:当按下返回键时,就返回到主屏幕,并带有参数FLAG_ACTIVITY_CLEAR_TOP,会清理掉当前的活动。
@Override publicbooleanonKeyDown(intkeyCode,KeyEventevent){ if(keyCode==KeyEvent.KEYCODE_BACK&&event.getRepeatCount()==0){//按下的如果是BACK,同时没有重复 Intenthome=newIntent(Intent.ACTION_MAIN); home.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); home.addCategory(Intent.CATEGORY_HOME); startActivity(home); } returnsuper.onKeyDown(keyCode,event); }
此方法确实结束了当前进程,但是通过Android平台的AppManager工具去查看的话,使用2.3.3的模拟器,会发现刚刚被结束的进程会以CachedbackgroundProcess的形式存在,并且模拟器给出了解释,说是为了下一次更快捷的启动这个进程。
更多关于Android相关内容感兴趣的读者可查看本站专题:《Android调试技巧与常见问题解决方法汇总》、《Android开发入门与进阶教程》、《Android多媒体操作技巧汇总(音频,视频,录音等)》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》
希望本文所述对大家Android程序设计有所帮助。