1 Process.killProcess  和 System.exit(0) 两个都会 kill 掉当前进程。

你可以打开 DDMS 查看进程号,或 adb shell 进入 shell 然后 ps 一下,进程确实被 kill 掉了。

2 如果是在第一个 Activity 调用 Process.killProcess 或 System.exit(0) 都会 kill 掉当前进程。

但是如果不是在第一个 Activity 中调用,如 ActivityA 启动 ActivityB ,你在 ActivityB 中调用

Process.killProcess 或 System.exit(0) 当前进程确实也被 kill 掉了,但 app 会重新启动,

又创建了一个新的进程。(这是我同事发现的)

这点还不是很明白,我估计 android os 认为 app 是被意外终止的(如内存不足),os 底层有监听服务,

app 被意外终止会自动重启。

3 在测试极光推送的时候,发现退出 app 后就收不到推送了。后来发现是调用了 System.exit(0) 的原因。

首先 service 也是在进程中的,在主线程中,所以 service 中如果有耗时操作也要开启另外的线程来处理。

当调用 System.exit(0) 或 Process.killProcess 的时候进程被 kill 掉了,进程里的所有东西当然包括 service 肯定

也没了。由于极光推送 pushservice 被 kill 掉了,所以退出 app 后就收不到推送了。

4 还没完,戏剧性的事情发生了,刚退出 app 由于 kill 掉了进程,服务没了,所以收不到推送。但是过了大约1分钟左右居然又能推过来了。

原来是和 service 的 onStartCommand 的返回值有关

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i("lelsie", "service onStartCommand");
return START_STICKY;
//return START_NOT_STICKY;
}

如果返回 START_STICKY 是说服务应该一直运行除非我们手动停止它。极光 pushservice 返回的肯定是 START_STICKY。

所以1分钟之内系统又重启了服务,当然会先为 app 创建一个新的进程,也就是重启了 app, 同样你可以在 DDMM 中查看进程的杀死与新进程的重建。

我在手机上截了 2 张图

            

第一个图是在调用了 Process.killProcess 或 System.exit(0) 之后的图,可以看到进程已不存在了,服务当然也不在了。显示正在重新启动。

第二个图是服务重启以后的正常状态,所以 1-2分钟后又能接收到推送了。

第三个图是 DDMS 截图

5 其实 Process.killProcess 或 System.exit(0) 都不应该直接调用, 进程是由 os 底层进行管理的,android 系统会自己进行处理回收进程。

退出应用你就直接  finish 掉 activity 就行了。

正常情况下 back 键退出应用以后 os 就会回收 app 进程, 但当 app 中有推送服务等需要长时间运行的服务时  os  就不会 kill 掉进程,也就是说应用将一直在线。 即使你手动  kill 掉进程, 进程也会自动重启。

本人水平有限,有问题大家再多讨论。。。。

有兴趣的同学可以用我写的 demo 测试: http://pan.baidu.com/s/1c0xS5g8

android Process.killProcess 和 System.exit(0) 区别的更多相关文章

  1. Android:finish()与System.exit(0)之间的区别

    finish()与System.exit(0)都是用来退出.但是两者还是有一定的区别: finish是Activity的类,仅仅针对Activity,当调用finish()时,只是将活动推向后台,并没 ...

  2. android Activity类中的finish()、onDestory()和System.exit(0) 三者的区别

    android Activity类中的finish().onDestory()和System.exit(0) 三者的区别 Activity.finish() Call this when your a ...

  3. android开发时,finish()跟System.exit(0)的区别

      这两天在弄Android,遇到一个问题:所开发的小游戏中有背景音乐,玩的过程中始终有音乐在放着,然后在我退出游戏后,音乐还在播放! 我看了一下我最开始写的退出游戏的代码,就是简单的finish() ...

  4. android finish和system.exit(0)的区别

    finish是Activity的类,仅仅针对Activity,当调用finish()时,只是将活动推向后台,并没有立即释放内存,活动的资源并没有被清理:当调用System.exit(0)时,杀死了整个 ...

  5. Android 与Java 进程退出 killProcess与System.exit

    android所有activity都在主进程中,在清单文件Androidmanifest.xml中可以设置启动不同进程,Service需要指定运行在单独进程?主进程中的主线程?还是主进程中的其他线程? ...

  6. System.exit(0)和System.exit(1)区别:

    System.exit(0)是将你的整个虚拟机里的内容都停掉了,而finish()只是退出了activity,并没有退出应用,Application还是存在于内存中的,除非被系统回收.无论如何,内存都 ...

  7. How to use Android Activity's finish(), onDestory() and System.exit(0) methods

    Activity.finish() Calling this method will let the system know that the programmer wants the current ...

  8. android中 System.exit(0)的理解

    public class HelloGoodbye{ try{ System.out.println(“Hello World”); System.exit(0); } finally { Syste ...

  9. 【Android】System.exit(0) 退出程序

    许多 Android 应用程序都是连续点击两下返回键时退出程序,代码如下: private long exitTime = 0; @Override public boolean onKeyDown( ...

随机推荐

  1. 2016 11 9遇到问题 http请求的各种方式

    遇到问题:对接网易七鱼 调用他们接口是出现问题 1.对方要求  除上传文件外,其他所有接口请求Content-Type类型为:application/json;charset=utf-8:请求内容需要 ...

  2. PHP四种传参方式

    test1界面: <html> <head> <title>testPHP</title> <meta http-equiv = "co ...

  3. 30、ADO.NET、事务、DataSet

    ADO.NET ADO.NET是一组用于和数据源进行交互的面向对象类库.通常数据源是数据库,但也可以是文本文件.Excel表格.XML文件. 说白了就是使用.net操作数据库的一套类库. ADO.NE ...

  4. SVN配置使用

    文档规则 [本地工作区] :work copy ,本地工作副本: [主项目]:引用共用模块的新项目(工程) 最新版本(HEAD revision):版本库里文件或目录的最新版本 SA :SVN服务器的 ...

  5. Javascript基础学习(1)_类型、值和变量

    1.null和undefined ①概念上区别: null是一个特殊的对象,是“非对象”,使用typeof后是object对象 undefined用未定义的值表示更深层次的“空值”,它是变量的一种取值 ...

  6. asp IIS部署An error occurred on the server when processing the URL错误提示解决

    An error occurred on the server when processing the URL. Please contact the system administrator.If ...

  7. oracle学习笔记1:windows下oracle数据库安装及.net调用oracle数据库

    1.下载32位或64位oracle数据库并且安装,安装时可以选择安装数据库实例或者不安装,如果不安装的话之后可以用Database Configuration Assistant(DBCA) 通过向导 ...

  8. MySQL Workbench 6.3 CE 不显示MySql、infomation_schema等数据库

    MySQL Workbench 6.3 CE 不显示MySql.infomation_schema等数据库 通过修改偏好设置可显示: 1.Edit-->Preferences....-----& ...

  9. Win7使用IIS通过域名访问本地程序(网页、css、js等)

    一.目的:在本地浏览器里面,输入www.abc.com 可以访问我们本地搭建的网页程序 二.好处:在本地模拟,真实的访问,另外可以设置一些二级域名,例如static.abc.com域名用来存储像图片, ...

  10. MORE ABORT AWR?

    For some time, Oracle’s solution in this area has been its built-in tool, Statspack.Oracle Database ...