`

Android之应用进程托管

阅读更多

应用进程托管

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)停止前台状态。

分享到:
评论

相关推荐

    Android应用程序进程管理

    这个PPT讲Android应用程序进程的启动和回收,主要涉及到Zygote进程、System Server进程,以及组件管理服务ActivityManagerService、窗口服务WindowManagerService,还有专用驱动Low Memory Killer。通过了解Android...

    在Android app中集成nginx,非JNI

    在Android应用中集成nginx是一项挑战性的任务,但可以为实现某些特定功能,如提供本地HTTP服务、静态资源托管或作为反向代理等带来便利。在这个过程中,我们不使用JNI(Java Native Interface)来实现,而是主要通过...

    android经验分享.pdf

    **4.1 进程托管与全局优化** - **基于组件状况的进程分级**:根据组件的状态(如是否处于前台),系统会对进程进行优先级排序。 - **组件回收**:系统会根据内存情况自动回收不再使用的组件,开发者需要确保组件...

    Android-Android.zip

    学习和开发Android应用需要掌握Java或Kotlin编程语言,理解Android SDK、Android Studio的使用,以及Android开发者文档中的概念和技术。通过分析和实践"Android-master"这样的项目,你可以深入了解Android应用的开发...

    Android手机另类刷机方法之ADB

    - **管理进程**:使用`adb jdwp`命令可以列出所有托管了JDWP(Java Debug Wire Protocol)传输的进程ID,方便调试。 - **应用管理**:除了安装应用外,还可以使用`adb uninstall [-k] <package>`卸载应用。其中`-k`...

    Android init 启动过程分析

    System Server是Android系统中的核心服务之一,它负责托管大部分系统服务,如Activity Manager、Window Manager等。 - **编译**:System Server的相关代码位于`frameworks/base/services/java/...

    Android

    Android 开源项目使用 Git 仓库托管代码,开发者可以通过 Git 下载源码,并利用 Git 工具进行代码浏览、分支管理、合并和提交操作。 对于 Android 开发,Android Studio 是官方推荐的集成开发环境(IDE)。它集成了...

    精通ANDROID 3(中文版)1/2

    2.5 剖析Android应用程序的结构  2.6 分析Notepad应用程序  2.6.1 加载和运行Notepad应用程序  2.6.2 分解应用程序  2.7 了解应用程序生命周期  2.8 调试应用程序  2.8.1 启动模拟器  2.8.2 ...

    基于Android的嵌入式Web服务器设计.pdf

    在本文实现的Web应用中,尽管基于Android,但它并不局限于传统的Android应用开发。通过i-jetty嵌入式Web服务器,可以在Android设备上提供Web服务。i-jetty是一个轻量级的Java Web服务器,适用于嵌入式环境,能够处理...

    android 树

    Android的跨进程通信机制Binder是其组件间通信的核心。理解服务注册、服务发现和Binder机制,有助于开发者深入理解Android系统的工作原理。 9. **HAL(硬件抽象层)**: HAL是Android连接硬件设备和上层软件的...

    android源码开发实战23.04.zip

    5. **应用框架**:包含Android应用程序接口(API),如Intent、BroadcastReceiver、Service等,这些都是应用开发的核心。源码开发者可以查看并修改这些框架服务。 6. **应用程序开发**:源码级别的开发意味着可以...

    Android中利用App实现消息推送机制的代码实例

    ### Android中利用App实现消息推送机制...总之,通过合理配置`AndroidManifest.xml`中的`service`标签和编写相应的服务逻辑,开发者可以在Android应用中实现稳定可靠的消息推送功能,从而提升用户体验和应用的活跃度。

    Android的AIDL通信机制[文].pdf

    定义 AIDL 接口需要使用 Java 编程语言语法在 .aidl 文件中定义,然后将它保存在托管服务的应用以及任何其他绑定到服务的应用的源代码(src/ 目录)内。 AIDL 的数据类型支持以下几种: * Java 编程语言中的所有...

    精通Android 3 (中文版)2/2

    2.5 剖析Android应用程序的结构  2.6 分析Notepad应用程序  2.6.1 加载和运行Notepad应用程序  2.6.2 分解应用程序  2.7 了解应用程序生命周期  2.8 调试应用程序  2.8.1 启动模拟器  2.8.2 ...

    安卓Android源码——优化大师源代码.zip

    总的来说,这个压缩包提供了一个实际的Android应用源代码实例,对于学习Android开发,尤其是性能优化方面,具有很高的参考价值。通过研究源码,开发者不仅可以了解到具体功能的实现,还能掌握如何在Android平台上...

    全志平台H313 H616安卓系统开发笔记.pdf

    * 应用组件交互:包括托管应用组件的进程、权限声明、库链接等。 全志平台定制: * 定制工作流程:包括使用分支管理、使用stash管理等。 * 升级地址、设备型号、默认语言和时区、开机静画、开机动画与视频、预装...

    Java编写的安卓系统优化软件源代码.rar

    Android系统基于Linux内核,但其应用程序层主要采用Java语言编写,并通过Dalvik或ART(Android Runtime)虚拟机运行。Java源码的可读性和可维护性使得开发者能快速理解和修改代码,以实现特定功能。这款优化软件正是...

Global site tag (gtag.js) - Google Analytics