`
dawuafang
  • 浏览: 1107318 次
文章分类
社区版块
存档分类
最新评论

Android进程与生命周期介绍

 
阅读更多
Android系统会尽可能长的延续一个应用程序进程,但在内存过低的时候,仍然会不可避免需要移除旧的进程。为决定保留或移除一个进程,Android将每个进程都放入一个“重要性层次”中,依据则是它其中运行着的组件及其状态。重要性最低的进程首先被消灭,然后是较低的,依此类推。重要性共分五层,依据重要性列表如下:
1. 前台进程
是用户操作所必须的,任一时间下,仅有少数进程会处于前台,仅当内存实在无法供给它们维持同时运行时才会被杀死。一般来说,在这种情况下,设备依然处于使用虚拟内存的状态,必须要杀死一些前台进程以用户界面保持响应。
•Android会依据进程中当前活跃组件的重要程度来尽可能高的估量一个进程的级别。比如说,如果一个进程中同时有一个服务和一个可视的activity,则进程会被判定为可视进程,而不是服务进程。
2. 可视进程
没有前台组件,但仍可被用户在屏幕上所见。当满足如下任一条件时,进程被认为是可视的:
• 它包含着一个不在前台,但仍然为用户可见的activity(它的onPause()方法被调用)。这种情况可能出现在以下情况:比如说,前台activity是一个对话框,而之前的 activity位于其下并可以看到。
• 它包含了一个绑定至一个可视的activity的服务。
可视进程依然被视为是很重要的,非到不杀死它们便无法维持前台进程运行时,才会被杀死。
3. 服务进程
是由 startService() 方法启动的服务,它不会变成上述两类。尽管服务进程不会直接为用户所见,但它们一般都在做着用户所关心的事情(比如在后台播放mp3或者从网上下载东西)。所以系统会尽量维持它们的运行,除非系统内存不足以维持前台进程和可视进程的运行需要。
4. 背景进程
包含目前不为用户所见的activity(Activity对象的 onStop() 方法已被调用)。这些进程与用户体验没有直接的联系,可以在任意时间被杀死以回收内存供前台进程、可视进程以及服务进程使用。一般来说,会有很多背景进程运行,所以它们一般存放于一个LRU(最后使用)列表中以确保最后被用户使用的activity最后被杀死。如果一个activity正确的实现了生命周期方法,并捕获了正确的状态,则杀死它的进程对用户体验不会有任何不良影响。
5. 空进程
不包含任何活动应用程序组件。这种进程存在的唯一原因是做为缓存以改善组件再次于其中运行时的启动时间。系统经常会杀死这种进程以保持进程缓存和系统内核缓存之间的平衡。
此外,一个进程的级别可能会由于其它进程依赖于它而升高。一个为其它进程提供服务的进程级别永远高于使用它服务的进程。比如说,如果A进程中的内容提供者为进程B中的客户端提供服务,或进程A中的服务为进程B中的组件所绑定,则A进程最低也会被视为与进程B拥有同样的重要性。

版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

    Android课程第一次实验报告_Andorid应用程序Activity生命周期.docx

     对于进程生命周期,一个普遍的错误就是:当一个Intent Receiver在它的onReceiveIntent()方法中,接收到一个intent后,就会从这个方法中返回。而一旦从这个方法返回后,系统将会认为这个Intent Receiver不再处于...

    四、Android程序生命周期-Android开发与实践

    了解Android系统的进程优先级的变化方式 了解Android系统的四大基本组件 ... 了解Activity的生命周期中各状态的变化关系 掌握Activity事件回调函数的作用和调用顺序 掌握Android应用程序的调试方法和工具

    Android Service生命周期详解

    组件生命周期将讨论活动、服务、广播接收者的生命周期——包括在生命周期中他们可能的状态、通知状态改变 的方法、及这些状态的组件寄宿的进程被终结和实例被销毁的可能性。 上篇Android开发之旅:组件生命周期(一...

    Android中进程生命周期的优先级

    学习Android最好的途径当然是强大的官方文档了,其中在Processes and Threads一节中对于进程生命周期淘汰优先级,有着详细的介绍。就不给大家转帖了,直接放译文吧,如下: Android系统会尽量维持进程的存在,但毕竟...

    基于Android Service 生命周期的详细介绍

    Android中的服务,它与Activity不同,它是不能与用户交互的,不能自己启动的,运行在后台的程序,如果我们退出应用时,Service进程并没有结束,它仍然在后台运行,那我们什么时候会用到Service呢?比如我们播放音乐...

    深入Activity的生命周期

    本PDF主要是介绍Activity生命周期,目的是为了更的多的android朋友初学者或者不太深入理解的朋友更加地深入android开发程序中去,并全面介绍Activity生命周期中的细节,理解Activity的生命周期对应用程序开发来说是...

    Android静态变量的生命周期 简单介绍

    不过Android不太突出的进程概念,所以对静态变量的生命周期就会感觉模糊,这种模糊对于值类型是无所谓的,如果是静态的对象引用,则与内存回收、内存泄漏这些问题有关,有必要加深研究和理解。 一、静态变量在类被...

    android编程 android编程入门 android开发 android软件

    目录 一、 简述 2 二、 应用程序的组成元素 2 1. Activity元素 2 2. Service元素 3 3. Broadcast receivers元素 3 4. Content providers元素 3 (一) 元素的激活 3 (二) 元素的去激活 4 ...(四) 进程的生命周期 15

    Android开发之旅 完整版pdf

    • Android 开发之旅:进程与线程 • Android 开发之旅:组件生命周期(一) • Android 开发之旅:组件生命周期(二) • Android 开发之旅:组件生命周期(三) • Android 开发之旅:又见Hello World! • ...

    Android消息总线,基于LiveData,具有生命周期感知能力,支持Sticky.zip

    Android消息总线,基于LiveData,具有生命周期感知能力,支持Sticky.zip,EventBus for Android,消息总线,基于LiveData,具有生命周期感知能力,支持Sticky,支持AndroidX,支持跨进程,支持跨APP

    Android开发指南.rar

    从英文开发资料Android Development Guide一文应用程序框架部分的翻译,覆盖了Android应用开发所有主要的概念。目录 关键类 3 应用程序组件 3 激活组件:intent 5 关闭组件 6 ...进程与生命周期 21

    Android开发之旅

    Android开发之旅:进程与线程 7 Android开发之旅:组件生命周期(一) 8 Android开发之旅:组件生命周期(二) 9 Android开发之旅:组件生命周期(三) 10 Android 开发之旅:又见Hello World!11 Android 开发...

    LiveEventBus:EventBus for Android,消息总线,基于LiveData,具有生命周期感知能力,支持Sticky,支持AndroidX,支持跨进程,支持跨APP

    LiveEventBus是一款Android消息总线,基于LiveData,具有生命周期感知能力,支持Sticky,支持AndroidX,支持跨进程,支持跨APP 为什么要用LiveEventBus 生命周期感知 消息随时订阅,自动取消订阅 告别消息总线造成...

    Android并发开发

    第2章和第3章分别介绍了Java并发和Android应用程序模型,主要介绍Java线程、同步、并发包、生命周期和组件、Android进程等基本概念。第4章介绍AsyncTask和Loader。第5-7章是本书的核心内容,深入探讨Android操作系统...

    Android开发之旅——完整版

    • Android 开发之旅:进程与线程 • Android 开发之旅:组件生命周期(一) • Android 开发之旅:组件生命周期(二) • Android 开发之旅:组件生命周期(三) • Android 开发之旅:又见Hello World! • ...

    android开发系列美文

    Android开发:android架构 Android开发:活动与任务 Android开发:进程与线程 Android开发:应用程序基础及组件 Android开发:组件生命周期 ...

    《Android系统源代码情景分析》

    5.4.3 Binder引用对象的生命周期 5.4.4 Binder代理对象的生命周期 5.5 Binder对象死亡通知机制 5.5.1 注册死亡接收通知 5.5.2 发送死亡接收通知 5.5.3 注销死亡接收通知 5.6 Service Manager的启动过程...

    Android开发宝典.rar

    进程与生命周期 22 用户界面User Interface 24 视图层次View Hierarchy 24 布局Layout 25 部件Widgets 26 用户界面事件UI Events 26 菜单Menus 26 高级话题Advanced Topics 27 适配器Adapter 27 风格与主题...

    Android开发案例驱动教程 配套代码

    13.1.2 远程Service生命周期 318 13.2 本地Service 319 13.2.1 本地Service案例 319 13.2.2 编写AudioService 320 13.2.3 调用Service 322 13.2.4 重构案例 323 13.3 远程Service 325 13.3.1 远程Service调用...

Global site tag (gtag.js) - Google Analytics