我们要知道除了Activity Lifecycle以外,Android还有一个Process Lifecycle的说明:

在内存不足的时候,Android是会主动清理门户的,那它又是如何判断哪个process是可以清掉的呢?文档中也提到了它的重要性排序:

1. 最容易被清掉的是empty process,空进程是指那些没有Activity与之绑定,也没有任何应用程序组件(如Services或者IntentReceiver)与之绑定的进程,也就是说在这个process中没有任何activity或者service之类的东西,它们仅仅是作为一个cache,在启动新的 Activity时可以提高速度。它们是会被优先清掉的。因此建议,我们的后台操作,最好是作成Service的形式,也就是说应该在Activity中启动一个Service去执行这些操作。

  2.接下来就是background activity了,也就是被stop掉了那些activity所处的process,那些不可见的Activity被清掉的确是安全的,系统维持着一个 LRU列表,多个处于background的activity都在这里面,系统可以根据LRU列表判断哪些activity是可以被清掉的,以及其中哪一个应该是最先被清掉。不过,文档中提到在这个已被清掉的Activity又被重新创建的时候,它的onCreate会被调用,参数就是onFreeze时的那个Bundle。不过这里有一点不明白的是,难道这个Activity被killed时,Android会帮它保留着这个Bundle吗?

  3.然后就轮到service process了,这是一个与Service绑定的进程,由startService方法启动。虽然它们不为用户所见,但一般是在处理一些长时间的操作(例如MP3的播放),系统会保护它,除非真的没有内存可用了。

  4.接着又轮到那些visible activity了,或者说visible process。前面也谈到这个情况,被Paused的Activity也是有可能会被系统清掉,不过相对来说,它已经是处于一个比较安全的位置了。

  5.最安全应该就是那个foreground activity了,不到迫不得已它是不会被清掉的。这种process不仅包括resume之后的activity,也包括那些onReceiveIntent之后的IntentReceiver实例。

  在Android Application的生命周期的讨论中,文档也提到了一些需要注意的事项:因为Android应用程序的生存期并不是由应用本身直接控制的,而是由 Android系统平台进行管理的,所以,对于我们开发者而言,需要了解不同的组件Activity、Service和IntentReceiver的生命,切记的是:如果组件的选择不当,很有可能系统会杀掉一个正在进行重要工作的进程。

更多相关文章

  1. Android开发面试经——2.常见Android基础笔试题
  2. android SystemClock设置系统时间需要system权限
  3. 对android LinearLayout中layout_weight属性使用
  4. android文件系统挂载分析(1)---正常开机挂载,分区信息解读
  5. Android(安卓)IPC 机制,进程间通信
  6. Android(安卓)7.1.2(Android(安卓)N) Activity启动流程分析
  7. 在低版本Android上使用Material Design
  8. Android(安卓)SQLite是线程安全的吗?
  9. android init 进程分析

随机推荐

  1. SQL基础知识V2——SQL语句快速参考
  2. SQL基础知识V2——常用数据类型
  3. SQL基础知识V2——BETWEEN
  4. 华为认证是在官网学习还是报名培训机构?
  5. 华为和H3C华三对比区别,哪个更好?
  6. 华为HCIA/HCIP/HCIE区别可以跨级报考吗如
  7. 华为认证HCIP考试费报名费复习方法HCIE考
  8. [MAC] 6 个好用小技巧大公开!
  9. 由于Linux系统文件同步时突然断电导致系
  10. 用披萨来解释IaaS,PaaS,SaaS 的区别