在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,那么就可以直接使用这个方法了。这个方法是通过查阅网上资料看到的。在此先感谢 追梦人 了(他的博客地址:http://www.cnblogs.com/yunfei181/archive/2011/01/24/1943128.html,欢迎大家去看看他的博客)。

功能:当按下返回键时,就返回到主屏幕,并带有参数FLAG_ACTIVITY_CLEAR_TOP,会清理掉当前的活动。

1 @Override
2 public boolean onKeyDown(int keyCode, KeyEvent event) {
3 if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { // 按下的如果是BACK,同时没有重复
4   Intent home = new Intent(Intent.ACTION_MAIN);
5 home.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
6 home.addCategory(Intent.CATEGORY_HOME);
7 startActivity(home);
8 }
9 return super.onKeyDown(keyCode, event);
10 }

  此方法确实结束了当前进程,但是通过Android平台的App Manager工具去查看的话,使用2.3.3的模拟器,会发现刚刚被结束的进程会以Cached background Process的形式存在,并且模拟器给出了解释,说是为了下一次更快捷的启动这个进程。

from: http://www.cnblogs.com/crazypebble/archive/2011/04/05/2006213.html

转载于:https://www.cnblogs.com/moonwolf009/archive/2012/06/23/2853463.html

Android下结束进程的方法相关推荐

  1. windows下结束进程命令

    windows下结束进程命令 1.netstat -aon|findstr "端口" 命令"netstat" 查看端口状态 2.tasklist|findstr ...

  2. Symbian结束进程的方法

    Symbian结束进程的方法很简单,直接上代码. void CTaskMgr::StopProcess() {TBuf<30> exefile;exefile.Copy(KBeMonito ...

  3. ubuntu如何杀进程_Ubuntu下各种结束进程的方法

    2 .敲 ps -ef 查出进程的编号(就是 PID 那列) 3 .敲 kill PID (如果 PID 是 123456 ,则 kill 123456 ) 4 . OK 了 ------------ ...

  4. C#各种结束进程的方法详细介绍

    Process类的CloseMainWindow, Kill, Close Process.CloseMainWindow是GUI程序的最友好结束方式,从名字上就可以看出来它是通过结束主窗体,相当于用 ...

  5. 结束拒绝访问的进程 cmd下结束进程 强行结束进程

    结束拒绝访问的进程 有些病毒和恶意进程我们在任务管理器里面是不能结束的,这个时候,如果又没有工具,就很麻烦了,今天看网管员世界,提到了一种方法,能够解决: 根本的思想是用system的权限来运行tas ...

  6. 结束拒绝访问的进程 cmd下结束进程 强行结束进程 1

    结束拒绝访问的进程 有些病毒和恶意进程我们在任务管理器里面是不能结束的,这个时候,如果又没有工具,就很麻烦了,今天看网管员世界,提到了一种方法,能够解决: 根本的思想是用system的权限来运行tas ...

  7. java中结束进程的方法_java关闭Process

    java1.8之后,Process有了destroy和destroyForcibly方法,用来结束进程,一般结束进程的流程为: terminate process with destroy() all ...

  8. c/c++ 结束进程的方法

    1.使用ExitProcess()结束进程      进程只是提供了一段地址空间和内核对象,其运行时通过在其地址空间内的主线程来体现的.当主线程的进入点函数返回时,进程也就随之结束.这种进程的终止方式 ...

  9. Linux下结束进程的几种命令,linux下进程命令

    1. ps查看进程:ps -ef|grep ljj 查看ljj用户的所有进程 2. ps 提供了很多的选项参数,常用的有以下几个:l 长格式输出: u 按用户名和启动时间的顺序来显示进程: j 用任务 ...

最新文章

  1. 年薪50万的程序员_这些年薪50万+的程序员都经历了什么?
  2. mysql8.0.19.0安装_一、MySQL8.0.19 安装教程
  3. Ibatisnet示例:npetshop学习一
  4. Request.UrlReferrer详解
  5. boost::posix_time模块打印当天的剩余小时数的测试程序
  6. Oracle 摘去数据块的面纱
  7. Ext自定义控件 - 自学ExtJS
  8. hadoop集群的搭建与配置(2)
  9. Odin插件与基于元数据的编辑器实现
  10. Python根据身份证得知性别
  11. 计算机学报论文字数要求,常见EI学报综述类文章分析
  12. PHP学习总结(二)
  13. 关闭微信朋友圈和公众号的广告
  14. Win10输入法移除未知区域设置(qad-Latn) 美式键盘
  15. 【20保研】热忱欢迎全国2020届优秀本科毕业生免试攻读重庆大学研究生
  16. [ Linux ] 零散文件系统安装各种命令和软件的方法
  17. 牛逼,手机居然可以无线投屏到笔记本电脑!
  18. iPhone x 解决启动图适配上下黑边的问题(排除所有其他原因后,发现是图片尺寸问题)
  19. 335x系列平台-usb的模式切换HOST和OTG
  20. Asp.net Core 入门实战

热门文章

  1. Mr.J--jQuery效果总结
  2. window.parent与window.opener的区别与使用
  3. Linux入门-第五周
  4. 原生js---ajax---post方法传数据
  5. Xamarin Android Webview中JS调用App中的C#方法
  6. Putty 重新启动 linux sqlserver服务
  7. Remove Duplicates from Sorted List leetcode
  8. ATL(COM) 开发下 -- VS2010
  9. Java中isAssignableFrom()方法与instanceof()方法用法
  10. 寒江的网站基本优化观点