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, 仍有可能被系统主动移除 .
分享到:
相关推荐
注意!我有用到appcompat_v7依赖包!所以没有的同学可以到我的上传资源列表中下载 ps:我只实现了循环首次适应算法和最佳适应算法
Android处理内存泄漏的代码例子。用于演示避免内存泄漏的几种方法,包括:关闭游标、重用适配、回收图像、注销监听、释放引用。
Android 是一款基于 Linux 内核,面向移动终端的操作系统。为适应其作为移动平台操作系统的特殊...Android 操作系统中的内存回收可分为两个层次: 1、默认内存回收、即Application Framework 层的默认回收。 2、内核
安卓 内核内存回收机制
Android中获取系统内存信息以及进程信息-----ActivityManager的使用(一)
操作系统作业,模拟操作系统的内存分配,分区回收。
本文在ApplicationFramework与Linux内核两个层次上,以进程为粒度,对Android操作系统的进程资源回收机制进行了剖析。读者可以从本文获得对Android应用程序的生存周期的进一步理解,从而更加合理、高效地构建应用...
第15章“Android应用程序的设计思想”,本章的内容是基于通用的应用程序和GUI程序的通用设计思想,结合Android系统自身的特点,提出一些值得注意的问题和设计方法。 本书读者 本书适应广大的读者群,力求在...
Android系统 = Linux内核 + Android运行时。 Android系统使用的Linux内核包含了一些专用驱动,例如Logger、Binder、Ashmem、Wakelock、Low-Memory Killer和Alarm等,这些Android专用驱动构成了Android运行时的基石。...
在内容上,《Android系统源代码情景分析(含CD光盘1张)》结合使用情景,全面、深入、细致地分析了Android系统的源代码,涉及到Linux内核层、硬件抽象层(HAL)、运行时库层(Runtime)、应用程序框架层...
在内容上,本书结合使用情景,全面、深入、细致地分析Android系统的源代码,涉及到Linux内核层、硬件抽象层(HAL)、运行时库层(Runtime)、应用程序框架层(Application Framework)以及应用程序层(Application)。...
《Android系统源代码情景分析》随书光盘内容(源代码) 目录如下: 第1篇 初识Android系统 第1章 准备知识 1.1 Linux内核参考书籍 1.2 Android应用程序参考书籍 1.3 下载、编译和运行Android源代码 ...
Android中内存加载dex
一个android小工程,里面有我自己写的一个工具类,可以轻松避免加载图片列表内存溢出,分享给需要的朋友,工程使用android 1.6SDK完成
第15章“Android应用程序的设计思想”,本章的内容是基于通用的应用程序和GUI程序的通用设计思想,结合Android系统自身的特点,提出一些值得注意的问题和设计方法。 本书读者 本书适应广大的读者群,力求在...
Android中修改运行时内存Dalvik字节码
Android 保证自己的服务被系统kill后又被系统重启,我的博客里面有详细讲解!
Android解决多个Fragment切换时布局重新实例化问题,并保存当前fragment页面,系统回收后还原之前fragment页面,内附源码及apk,博客:http://blog.csdn.net/fan7983377/article/details/51889269