`
v5browser
  • 浏览: 1137263 次
社区版块
存档分类
最新评论

Android系统内存不足时,组建回收顺序问题

 
阅读更多

Android Process Lifecycle
Android系统内存不足时 , 就需要把旧的或不需要用的应用 程序 移除. 如同之前的 Activity 生命 周期 所介绍, 这个移除的决定是由应用 程序 所处的状态来判断. 一般来说,当需要移除应用 程序 时, 系统将会做排序 , 然后从最不重要的开始移除 , 以下是移除时的考量顺序 :
1. 最早被移除的是 Empty Process( 空行程 ):
Empty process 是指那些没有跟 Activity 绑定 , 也没有跟任何的应用 程序组件 (比如 Service 或 IntentReceiver) 绑定在一起的process, 这些空行程一定是最早被系统考虑移除的 .
2. 第 2 顺位考虑被移除的是 Background Activity.
Background Activity指这个 activity 是无法被使用者看到的的情况 , 表示 Activity 已处于 stop 的状态 , 系统移除这些 Activity 是安全的 . 通常有多个 Background Activity 同时运行 , 这些 Activity 被存放在一个 LRU (least recent used) list 中 , 系统可以根据 LRU list 判断哪些 Activity 可以被移除 , 哪一个应该是最先被移除的 .

3. 第 3 顺位被移除的是 Service Process.
在 Android 应用 程序 裡, 有一种没有 UI 的类别 (android.app.Service), 称之为 Service. Service Process 通常是由startService() 方式启动 . 简单来说, Service 属于 background( 背景 ) 程序 , 透过背景程序 , 我们可以製作一些不需要 UI 的功能 , 例如 : 在背景拨放音乐 , 上传或下载文件等 . 系统通常会保护它 , 除非真的没有 内存 可用.

4. 接着轮到 Visible Activity / Visible Process:
Visible Process是一个可被 Visible 的 , 但是没有显示在最上端 (onPause 被使用时 ). 举例来说 , 当一个新的对话框 Activity 出现时 , 原来的 Activity 仍然 visible, 仍然被系统认为是重要的 , 通常不会被移除 . 但若不得不移除时 , 由于属于 Paused 状态 , 相对来说 , 它已经处于一个比较安全的位置 .

5. 最后被移除的是 Foreground Activity:
Foreground 是一个在 屏幕 最上端与使用者做互动的Activity, 它的优先权最高 . 原则上会是最后一个被移除的 程序 , 除非这个Activity 所需要的 内存 大小已经超出系统所能给的. 系统之所以会移除这些程序 , 是为了不让使用者 页面 停止回应.

由于Android 应用 程序 的lifecycle 并不是由 程序 本身直接控制的, 而是由系统平台进行管理 . 所以对于开发者而言 , 许要了解不同组件 Activity, Serivce 和 IntentReceiveer 的 Lifecycle. 要切记 : 如果 组件 使用不当, 虽然正在进行重要的 Process, 仍有可能被系统主动移除 .


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics