`

Android开发之组件生命周期(三)

阅读更多

Android系统试图尽可能长地保持一个应用程序进程,但是当内存低时它最终还是需要移除旧的进程。为了决定保持哪个进程及杀死哪个进程,Android将每个进程放入一个基于运行于其中的组件的重要性等级和这些组件的状态。重要性最低的进程首先被杀死,然后是次低,以此类推。总共有5个层次等级。下列清单按重要性顺序列出:

  1. 前台进程,用户当前工作所需要的。一个进程如果满足下列任何条件被认为是前台进程:
    1. 它正运行着一个正在与用户交互的活动(Activity对象的onResume()方法已经被调用)。
    2. 它寄宿了一个服务,该服务与一个与用户交互的活动绑定。
    3. 它有一个Service对象执行它的生命周期回调(onCreate()onStart()onDestroy())。
    4. 它有一个BroadcastReceiver对象执行他的onReceive()方法。

      在给定时间内仅有少数的前台进程存在。仅作为最后采取的措施他们才会被杀掉——如果内存太低以至于他们不能继续运行。一般来说,就在那时,设备达到一个内存???状态,因此杀掉某些前台进程以保持用户界面响应。
  2. 可视进程,他没有任何前台组件,但是仍然能影响用户在屏幕上看到东西。一个进程满足下面任何一个条件都被认为是可视的:
    1. 它寄宿着一个不是前台的活动,但是它对用户仍可见(它的onPause()方法已经被调用)。举例来说,这可能发送在,如果一个前台活动是一个对话框且运行之前的活动在其后面仍可视。
    2. 它寄宿着一个服务,该服务绑定到一个可视的活动。

      一个可视进程被认为是及其重要的且不会被杀死,除非为了保持前台进程运行。
  3. 服务进程,是一个运行着一个用startService()方法启动的服务,并且该服务并没有落入上面2种分类。虽然服务进程没有直接关系到任何用户可见的,它们通常做用户关心的事(诸如在后台播放mp3或者从网络上下载数据),因此系统保持它们运行,除非没有足够内存随着所有的前台进程和可视进程保持它们。
  4. 后台进程,是一个保持着一个当前对用户不可视的活动(已经调用Activity对象的onStop()方法)。这些进程没有直接影响用户体验,并且可以在任何时候被杀以收回内存用于一个前台、可视、服务进程。一般地有很多后台进程运行着,因此它们保持在一个LRU(least recently used,即最近最少使用,如果您学过操作系统的话会觉得它很熟悉,跟内存的页面置换算法LRU一样。)列表以确保最近使用最多的活动的进程最后被杀。如果一个活动执行正确地执行它的生命周期方法,且捕获它当前的状态,杀掉它对用户的体验没有有害的影响。
  5. 空进程,是一个没有保持活跃的应用程序组件的进程。保持这个进程可用的唯一原因是作为一个cache以提高下次启动组件的速度。系统进程杀死这些进程,以在进程cache和潜在的内核cache之间平衡整个系统资源。

Android把进程标记为它可以的最高级,即进程中活跃的组件中重要性最高的那个(选取重要性最高的那个作为进程的重要性级别)。例如,有一个进程寄宿着一个服务和一个可视活动,进程的级别被设置为可视进程级别,而不是服务进程级别(因为可视进程级别比服务进程级别高)。

此外,一个进程的排名因为其他进程依赖它而上升。一个进程服务其它进程,它的排名从不会比它服务的进程低。例如,进程A中的一个内容提供者服务进程B中的一个客户,或者进程A中的一个服务绑定到进程B中的一个组件,进程A总是被认为比进程B重要。

因为一个运行一个服务进程排名比一个运行后台活动的进程排名高,一个活动启动一个服务来初始化一个长时间运行操作,而不是简单地衍生一个线程——特别是如果操作很可能会拖垮活动。这方面的例子是在后台播放音乐和上传相机拍摄的图片到一个网站。使用服务保证操作至少有“服务进程”的优先级,无论活动发生什么情况。

分享到:
评论

相关推荐

    Android开发之旅

    Android开发之旅:组件生命周期(三) 10 Android 开发之旅:又见Hello World!11 Android 开发之旅:深入分析布局文件&又是“Hello World!” 12 Android 开发之旅:view的几种布局方式及实践 13 Android 开发...

    Android开发之旅 完整版pdf

    • Android 开发之旅:组件生命周期(三) • Android 开发之旅:又见Hello World! • Android 开发之旅:深入分析布局文件&又是"Hello World!" • Android 开发之旅:view的几种布局方式及实践 • Android ...

    Android开发之旅——完整版

    • Android 开发之旅:组件生命周期(三) • Android 开发之旅:又见Hello World! • Android 开发之旅:深入分析布局文件&又是"Hello World!" • Android 开发之旅:view的几种布局方式及实践 • Android ...

    Android开发四大组件之Service应用总结Demo

    demo包含测试service的生命周期走向,service的启动,停止,绑定,取消绑定,以及IntentService的生命周期走向测试和IntentService与访问者信息通信过程,不清楚之处请参阅我的博客《Android开发四大组件之Service...

    新的Android体系结构组件生命周期的Rx绑定-Android开发

    新的Android体系结构组件生命周期许可的RxComponentLifecycle Rx绑定版权所有2017 Florent37,Inc.受Apache许可,版本2.0(“许可”)许可; 您不得使用此文件,除非是新的Android体系结构组件生命周期许可证的...

    android_Activity生命周期

    android_ctivity生命周期,应用程序组件的简介以及生命周期,会对Andriod的开发最基本的有些深刻的认识

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

     Android一个重要并且特殊的特性就是,一个应用的进程的生命周期不是由应用自身直接控制的,而是由系统,根据运行中的应用的一些特征来决定的,包括:这些应用对用户的重要性、系统的全部可用内存。  对于应用...

    android开发系列美文

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

    android开发揭秘PDF

    3.2 Android的生命周期 3.3 Android程序U设计 3.4 小结 第4章 用户界面开发 4.1 用户界面开发详解 4.1.1 用户界面简介 4.1.2 事件处理 4.2 常用控件应用 4.2.1 文本框(Textiew) 4.2.2 列表(ListView) 4.2.3 提示(T0...

    Android Service生命周期详解

    上篇Android开发之旅:组件生命周期(一)讲解了论活动的生命周期及他们可能的状态、通知状态改变的方法。本篇将介绍服务和广播接收者的生命周期: 服务生命周期 广播接收者生命周期 1、服务生命周期 一个服务可以用...

    Android开发-Activity的生命周期及Intent

    1. 掌握activity组件生命周期函数的用法 2. 掌握使用intent实现activity之间的跳转 3. 掌握在manifest文中定义多个activity,并指定Launcher Activity 4. 掌握Activity的启动模式,和启动模式所对应的Activity和...

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

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

    Android应用开发详解

    Android 基本程序单元Activity,讲述了Android中重要组件Activity的创建、启动和生命周期等内容 第6章 Android组件之间的信使Intent Android 组件之间的信使Intent,讲述了Intent对象及其属性、Intent的实现策略和...

    Android-简化Android组件之间的共享字段和通信以及可识别生命周期的自定义范围

    简化Android组件之间的共享字段和通信,以及可识别生命周期的自定义范围

    老罗android开发视频教程全集百度网盘下载

    Android基础阶段:平台架构特性(JAVA/C) Market/应用程序组件 环境搭建与部署/打包与发布 AVD/DDMS/AAPT 调试与测试 相关资源访问/资源制作 Activity/Service/Broadcast Receiver/Content Provider/原理(生命周期)及...

    Android编程中的四大基本组件与生命周期详解

    本文实例讲述了Android编程中的四大基本组件与生命周期。分享给大家供大家参考,具体如下: Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器。 一:了解...

    ReactNative中组件的生命周期

    RN组件的生命周期整理如下图:如图,可以把组件生命周期大致分为三个阶段:第一阶段:是组件第一次绘制阶段,如图中的上面虚线框内,在这里完成了组件的加载和初始化;第二阶段:是组件在运行和交互阶段,如图中左下...

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

    《Android开发案例驱动教程》 配套代码。 注: 由于第12,13,14章代码太大,无法上传到一个包中。 这三节代码会放到其他压缩包中。 作者:关东升,赵志荣 Java或C++程序员转变成为Android程序员 采用案例驱动模式...

    Android开发三剑客_part1

    从整体上来看 一款Android产品分为设计 编码和测试三个阶段 《Android开发三剑客:UML 模式与测试》着眼于Android产品的两个重要环节 设计和测试 分为上篇 中篇和下篇 上篇以Android多线程断点续传下载器为例 细致入...

    android移动开发本科期末大作业营销号模拟器源码+高分必看.zip

    这个生命周期的图还是非常重要的。android移动开发本科期末大作业营销号模拟器源码。安卓移动开发课程的一个期末作业,做的是一个营销号模拟器。Activity其实还是比较抽象的,不过用了多了以后就慢慢能理解了。简单...

Global site tag (gtag.js) - Google Analytics