应用进程托管

Android中,应用进程的构造与销毁由系统掌控,称之为应用进程托管。

Android通过进程托管,在没有虚拟内存机制下,实现多进程多任务的并发处理。托管策略优劣决定了系统运行效率。

托管的引入是为了简化编程模型,为了全局调度和优化进程对系统资源的使用。

进程优先级

进程优先级是进程托管的基础。Android通过每个应用进程中组件类型和运行特征,将进程划分为不同的优先级。优先级越高,该进程组件对用户当前的状态越重要。对应的,系统应分配的资源就越多,进程运行的时间也越长。

应用进程按优先级分为:前台进程、可视进程、服务进程、后台进程、空进程。优先级的评定依据:进程中的界面组件、服务组件和触发器组件的运行情况。

数据源组件不会作为优先级评定条件,因为数据源是持久的。

优先级的高低由应用进程中组件与用户的交互状态来确定。进程中包含的组件与用户的交互越密切,优先级越高。

前台进程优先级最高,可占据资源最多。

前台进程、可视进程、服务进程统称为体验性进程,子要资源运行就不回收这些进程。后台进程、空进程称为性能型进程。

进程回收算法

Android中,每个应用进程的生命周期由系统控制,系统会根据进

程优先级、资源状况等因素,决定何时回收。

回收进程的原则:

尽量延长进程的生命周期,在资源运行的范围内,尽量不回收已创建的应用进程;

组件进程按优先级由低到高回收;

同等优先级进程,越近被使用过的越晚回收。

对体验型进程和性能型进程回收策略不同。

性能型进程回收,发生在组件状态特定改变时,这些状态有:

界面组件被销毁,Activity.onDestory()被调用;

触发器组件完成执行,BroadcastReceiver.onReceive()执行完毕;

触发器组件停止监听广播事件,即Context.registerReceiver()函数注销了对应的触发器组件;

系统进入待机状态。

性能型进程回收流程:

首先Android会计算系统可接受的“性能型”进程的最大数量A(默认为2),如果现有“性能型”进程的数量低于A,则无需回收;

如果现有“性能型”进程的数量高于A,先行回收空进程。所有空进程按最近访问时间由晚到早依次回收。一旦如果现有“性能型”进程的数量低于A,则停止回收。

若所有空进程回收完毕,如果现有“性能型”进程的数量高于A,系统开始回收后台进程,直至进程的数量低于A

“性能型”进程回收按数量控制——粗粒度,不精确。

当系统完成“性能型”进程回收后,还进行后台界面组件回收过程。后台界面组件进程的默认值是2,超过2则开始回收。

组件被回收前,Android先调用Activity.onSaveInstanceState函数,将界面组件数据写道磁盘暂存。如果需要再次构造该组件,则会调用

Activity.onResourceInstanceState函数恢复到回收前的状态。

进程的强行终止

若进程组件触发了未捕获的异常或运行错误,会导致应用进程变成异常进程,无法继续执行。此时,android会强制终止组件的运行。

组件管理服务在终止进程前,会保存异常发生时进程各个任务中界面组件栈的内容,终止进程后,会重新构造新的应用进程,并将各个任务的组件栈恢复至异常发生前的状况。

若组件执行同步操作时间过长,或进程对用户的操作无法及时响应,会被视为无响应进程。常见状况有:

对用户操作5秒还没有响应;触发器组件执行BroadcastReceiver.onReceive()的时间超过10秒。

掌控进程的优先级

掌控进程优先级最重要的是把握各个组件的优先级,在不同的生命周期内,做合适的事情。

Android2.0开始支持前台服务组件,大多数情况下,服务组件在后台提供服务,但如在放音乐时,开发者期望提示服务组件的优先级,更稳定的提供服务,开发者可以通过Service.startForeground方法,将服务组件与Android的通知栏绑定,为后台服务打开一扇与用户交互的窗口,将所在进程提升为前台进程,避免被系统回收。stopForeground(true)停止前台状态。

更多相关文章

  1. Chronometer android计时器组件Chronometer的使用,android通话时
  2. Android进阶 ——— Android官方架构组件Lifecycle
  3. Android Studio 第六十四期 - Android业务组件化之URL Scheme使
  4. 关于Android进程知识,你需要知道这些(一)
  5. Android进程管理机制及优化 for HTC HeRO(其它设备也可参考)+自动
  6. TimePicker组件&DatePicker组件
  7. Android Messenger 进程间通信
  8. AndroidUI组件之RoomButton
  9. 78 Android BroadcastReceiver 有序广播_ 优先级_终止广播

随机推荐

  1. 系统安全
  2. android系统架构图及各层介绍
  3. Android线程处理简述
  4. 【Android每日一讲】2012.11.08 Android
  5. 在荷兰Android占有70%的智能手机市场份额
  6. Handler内存泄露原理及解决方法
  7. Android运行环境Dalvik和ART的比较
  8. Android源码下载之《Android新闻客户端源
  9. [置顶] 杂谈——Android从启动到程序运行
  10. Android 和 iPhone 界面布局示例