http://wear.techbrood.com/guide/components/processes-and-threads.html

每一个 android 应用默认会起一个进程,除非你用 android:process 实现多进程。

每一个进程里面都有一个 dalvik 虚拟机实例用来执行代码。

进程中默认只有一个主线程(UI线程), 4 大组件默认都运行在 UI 线程中, 所以 4 大组件中都不能直接做耗时操作,否则会 ANR。

service 和 broadcastreceiver 中要做耗时操作都必须开启单独的线程来做。

但按 back 键退出应用后,进程什么时候被回收呢??

android 会尽可能长时间的去保留一个应用进程不被回收,这样下次可以快速启动,只有当内存紧张时才会回收进程,而回收哪些进程则根据进程的优先级来判断。

默认有 5 种进程优先级, 根据进程中组件的状态来判断:

Foreground process

简单来说就是正在前台与用户交互的进程,优先级最高。
Visible process

可见但没有与用户交互

Service process

不是 1 和 2 但含有用 startService 启动的 service 的进程。

Background process

非 1 2 3 不可见的进程

Empty process

空进程,主要做缓存。

android 推送都是在 service 中进行 socket 通信,进程优先级默认是 3 ,所以内存紧张时也是有可能被 Kill 掉的,就收不到推送了。

service 可以通过  startForground() 来设置为前台进程,这样优先级就变为 1 了,不容易被 kill 掉。而且通过 onStartCommand 的返回值

可以控制进程在被意外 kill 掉时是否需要重启,这样就达到了长时间运行,应用永远在线, 用 tcp 长连接实现推送。

看有些人用 System.exit(0) 和 Process.killProcess 来 kill 掉进程,这 2 个方法确实都能 kill 掉进程,但有些情况下会导致应用重启,例如

当 A 启动 B 你在 B 中调用 System.exit(0) 或  Process.killProcess 时会 kill 掉当前进程然后重启一个新的进程。

我之前说过 90% 的情况下你是不需要手动 kill 掉一个应用的进程的,这样第二次启动肯定非常慢。进程是由 OS 底层进行管理的,退出应用你只需要

finish 掉所有的 activity 就行了。如果有些需求确实需要 kill 掉进程,上面的 2 个方法也可以,前提是任务站内只有一个 activity 时再调用。反正我目前

还没有遇到过需要每次退出应用都必须杀死进程的场景,不要跟我说是为了节省内存,上面说了 5 种进程等级,系统自己会管理,不需要人为干预。

而且你自己杀死进程后第二次启动又需要创建新的进程,应用启动就非常慢了。

android 进程什么时候被销毁的更多相关文章

  1. 【腾讯Bugly干货分享】Android进程保活招式大全

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57ac4a0ea374c75371c08ce8 作者:腾讯——张兴华 目前市面上 ...

  2. Android 进程生命周期 Process Lifecycle

    Android 进程生命周期 Process Lifecycle 进程的生命周期 Android系统会尽力保持应用的进程,但是有时为了给新的进程和更重要的进程回收一些内存空间,它会移除一些旧的进程. ...

  3. Android 进程保活招式大全

    目前市面上的应用,貌似除了微信和手Q都会比较担心被用户或者系统(厂商)杀死问题.本文对 Android 进程拉活进行一个总结. Android 进程拉活包括两个层面: A. 提供进程优先级,降低进程被 ...

  4. Android(java)学习笔记160:Framework运行环境之 Android进程产生过程

    1.前面Android(java)学习笔记159提到Dalvik虚拟机启动初始化过程,就下来就是启动zygote进程: zygote进程是所有APK应用进程的父进程:每当执行一个Android应用程序 ...

  5. 【朝花夕拾】Android性能篇之(六)Android进程管理机制

    前言        Android系统与其他操作系统有个很不一样的地方,就是其他操作系统尽可能移除不再活动的进程,从而尽可能保证多的内存空间,而Android系统却是反其道而行之,尽可能保留进程.An ...

  6. Android 进程保活招式大全(转载)

    目前市面上的应用,貌似除了微信和手Q都会比较担心被用户或者系统(厂商)杀死问题.本文对 Android 进程拉活进行一个总结. Android 进程拉活包括两个层面: A. 提供进程优先级,降低进程被 ...

  7. Android开发——Android进程保活招式大全

    )前台进程(Foreground process),即用户当前操作所必需的进程,通常数量不多.举例如下: //拥有用户正在交互的 Activity(已调用 onResume()) //拥有某个 Ser ...

  8. 从AIDL开始谈Android进程间Binder通信机制

    转自: http://tech.cnnetsec.com/585.html 本文首先概述了Android的进程间通信的Binder机制,然后结合一个AIDL的例子,对Binder机制进行了解析. 概述 ...

  9. Android(java)学习笔记103:Framework运行环境之 Android进程产生过程

    1. 前面Android(java)学习笔记159提到Dalvik虚拟机启动初始化过程,就下来就是启动zygote进程: zygote进程是所有APK应用进程的父进程:每当执行一个Android应用程 ...

随机推荐

  1. spring所需包下载

    1.进入http://repo.spring.io/webapp/search/artifact/选择artifacts,在搜过栏输入spring-framework,点击查询出来的表头artifac ...

  2. [Effective JavaScript 笔记]第30条:理解prototype、getPrototypeOf和__ptoto__之间的不同

    原型包括三个独立但相关的访问器.这三个单词都是对单词prototype做了一些变化. C.prototype用于建立由new C()创建的对象的原型 Object.getPrototypeOf(obj ...

  3. 新的开始---cocos2d

    今天是一个新的开始,cocos2d的环境搭配好了,并且打包案桌apk的环境也搭配好了,安卓的这个搭配环境还是出了一点问题,前面弄了两个晚上(11-12.30)没弄出来,中间好几天都没有去弄,今天光棍节 ...

  4. ubuntu 修改保存报错E37:No write since last change(add ! to override)的解决方法

    报错信息如下: E37: No write since last change (add ! to override) 解决办法是: 在修改完后,将命令 :q 改成 :wq 即可.

  5. A PHP extension for Facebook's RocksDB

    A PHP extension for Facebook's RocksDB 31 commits 2 branches 0 releases 2 contributors C++ 90.5% C 8 ...

  6. Ubuntu14.04server开放rootssh登录权限

    刚安装了Ubuntu 14.04 server的虚拟机,普通帐号可以远程登录,但是root不行,输入密码后一直报错: permission denied 最后发现ssh的配置(/etc/ssh/ssh ...

  7. mac os x查看端口命令

    `netstat` 命令 a. `netstat -nat | grep <端口号>` 转自: http://my.oschina.net/foreverich/blog/402252

  8. 【SpringMVC】SpringMVC系列5之@RequestHeader 映射请求头属性值

    5.@RequestHeader 映射请求头属性值 5.1.概述 请求头包含了若干个属性,服务器可据此获知客户端的信息,通过 @RequestHeader 即可将请求头中的属性值绑定到处理方法的入参中 ...

  9. zpf 命名规则

    2014年8月19日 18:48:39 所有控制器都要继承main类,main类是一个入口类,他里边根据请求初始化了一些变量,也初始化了一些系统变量等等,这些变量和函数可以被控制器类直接使用 控制器类 ...

  10. 用jquery追加的元素不能触发treeview事件

    在追加的元素后面添加: $("#navigation").treeview({ persist: "location", collapsed: true, un ...