`
jiguansheng
  • 浏览: 125276 次
  • 性别: Icon_minigender_1
  • 来自: 九江
社区版块
存档分类
最新评论

Android 应用程序 生命周期

 
阅读更多

在大多数情况下,每个Android 应用程序都运行在自己的Linux 进程中。当应用程序的

某些代码需要运行时,这个进程就被创建并一直运行下去,直到系统认为该进程不再有

用为止。然后系统将回收进程占用的内存以便分配给其它的应用程序。

 

应用程序的开发人员必须理解不同的应用程序组件(尤其是Activity, Service, 和

BroadcastReceiver)是如何影响应用程序进程生命周期的,这是很重要的一件事情。

不正确地使用这些组件可能会导致系统杀死正在执行重要任务的应用程序进程。

 

一个常见的进程生命周期bug 的例子是BroadcastReceiver, 当BroadcastReceiver

在BroadcastReceiver.onReceive()方法中接收到一个Intent 时,它会启动一个线程,

然后返回。一旦它返回,系统将认为BroadcastReceiver 不再处于活动状态,因而

BroadcastReceiver 所在的进程也就不再有用了(除非该进程中还有其它的组件处于活

动状态)。因此,系统可能会在任意时刻杀死进程以回收内存。这样做的话,进程中创

建(spawned)出的那个线程也将被终止。对这个问题的解决方法是从

BroadcastReceiver 启动一个服务,让系统知道进程中还有处于活动状态的工作。为了

决定在内存不足时让系统杀死哪个进程,Android 根据每个进程中运行的组件以及组件

的状态把进程放入一个”重要性分级(importance hierarchy)”中。进程的类型包括(按重

要程度排序):

 

1. 前台(foreground)进程,与用户当前正在做的事情密切相关。不同的应用程

序组件能够通过不同的方法使它的宿主进程移到前台。当下面任何一个条件满足

时,可以考虑将进程移到前台:

1. 进程正在屏幕的最前端运行一个与用户交互的Activity (它的onResume()

方法被调用)

2. 进程有一正在运行的BroadcastReceiver (它的

BroadcastReceiver.onReceive()方法正在执行)

3. 进程有一个Service,并且在Service 的某个回调函数(Service.onCreate(),

Service.onStart(), 或 Service.onDestroy())内有正在执行的代码。

1. 可见(visible)进程,它有一个可以被用户从屏幕上看到的Activity,但不在前

台(它的onPause()方法被调用)。举例来说,如果前台的Activity 是一个对话

框,以前的Activity 隐藏在对话框之后,就可能出现这种进程。这样的进程特别

重要,一般不允许被杀死,除非为了保证前台进程的运行不得不这样做。

2. 服务(service)进程,有一个已经用startService() 方法启动的Service。虽然

这些进程用户无法直接看到,但它们做的事情却是用户所关心的(例如后台MP3

回放或后台网络数据的上传下载)。因此,系统将一直运行这些进程除非内存不

足以维持所有的前台进程和可见进程。

3. 后台(background)进程, 拥有一个当前用户看不到的Activity(它的onStop()

方法被调用)。这些进程对用户体验没有直接的影响。如果它们正确执行了Activity

生命期(详细信息可参考Activity),系统可以在任意时刻杀死进程来回收内存,

并提供给前面三种类型的进程使用。系统中通常有很多个这样的进程在运行,因

此要将这些进程保存在LRU 列表中,以确保当内存不足时用户最近看到的进程

最后一个被杀掉。

4. 空(empty)进程,不包含任何处于活动状态的应用程序组件。保留这种进程的

唯一原因是,当下次应用程序的某个组件需要运行时,不需要重新创建进程,这

样可以提高启动速度。

系统将以进程中当前处于活动状态组件的重要程度为基础对进程进行分类。请参考

Activity, Service 和 BroadcastReceiver 文档来获得有关这些组件在进程整个生命期中

是如何起作用的详细信息。每个进程类别的文档详细描述了它们是怎样影响应用程序整

个生命周期的。进程的优先级可能也会根据该进程与其它进程的依赖关系而增长。例如,

如果进程A 通过在进程B 中设置Context.BIND_AUTO_CREATE 标记或使用

ContentProvider 被绑定到一个服务(Service),那么进程B 在分类时至少要被看成与

进程A 同等重要。

分享到:
评论

相关推荐

    android 应用程序的生命周期

    android 应用程序的生命周期 课件

    android 应用程序开发者 第4章 android 生命周期

    对android应用程序的生命周期有一个很详细的介绍,非常适合初学者

    Android应用程序生命周期中的活动与图标

    让应用程序生命周期中的交互方式与您的期望完全一致,并使用图标与操作栏引导用户使用UI导航与其他应用程序功能。如今移动设备的功能已经强大到难以置信,比众多开发人员用来编写首个程序的桌面计算机还要强大得多。...

    RxLifecycle:使用 RxJava 的 Android 应用程序生命周期处理 API-开源

    该库允许基于第二个生命周期流自动完成序列。 此功能在 Android 中很有用,因为不完整的订阅会导致内存泄漏。 你必须从一个 Observable 开始表示生命周期流。 然后使用 RxLifecycle 将序列绑定到该生命周期。 它假设...

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

    在大部份情况下,每个Android应用都将运行在自己的Linux进程当中。当这个应用的某些代码需要执行时,进程就会被创建,并且将保持运行,直到该进程不再需要,而系统需要释放它所占用的内存,为其他应用所用时,才停止...

    android-activity-lifecycle-demo:一个Android应用程序,展示何时进行各种活动生命周期回调

    Android生命周期演示展示android活动生命周期的android应用演示。 有两个活动, MainActivity.java和secondActivity.java 。 使用logcat和log类,当两个活动中的每个回调都被调用时,此应用向用户显示。 这两个活动...

    Android编程组件及生命周期解析

    Android应用程序组件中有一个生命周期,贯穿于创建到结束的整个周期。周期里面含有各种状态,这些状态对组件的生命周期起着至关重要的影响。

    实验一 第一个Android程序和Activity生命周期.zip

    实验一 第一个Android程序...2.熟悉Android应用程序的基本文件结构 3.了解使用开发环境各种工具的基本用法 在程序中增加生命周期函数,并输出log,可以参考课本第四章内容,根据logcat的输出结果,分析程序的运行流程。

    Android高级编程--源代码

    3.4 Android应用程序生命周期 48 3.5 理解应用程序的优先级和进程状态 49 3.6 分离资源 50 3.6.1 创建资源 50 3.6.2 使用资源 57 3.6.3 To-Do List资源示例 60 3.6.4 为不同的语言和硬件创建资源 61 3.6.5 ...

    android_Activity生命周期

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

    Android 程序应用的生命周期

    本篇文章小编为大家介绍,Android 程序应用的生命周期。需要的朋友参考下

    《Android高级编程》

    2.5 小结 第3章 创建应用程序和活动 3.1 Android应用程序的组成部分 3.2 程序清单简介 3.3 使用清单编辑器 3.4 Android应用程序生命周期 3.5 理解应用程序的优先级和进程状态 3.6 分离资源 3.6.1 创建资源 3.6.2 ...

    Android高级编程 part1

     3.4 Android应用程序生命周期  3.5 理解应用程序的优先级和进程状态  3.6 分离资源  3.6.1 创建资源  3.6.2 使用资源  3.6.3 To-DoList资源示例  3.6.4 为不同的语言和硬件创建资源  3.6.5 运行时配置更改 ...

    Android高级编程 part2

     3.4 Android应用程序生命周期  3.5 理解应用程序的优先级和进程状态  3.6 分离资源  3.6.1 创建资源  3.6.2 使用资源  3.6.3 To-DoList资源示例  3.6.4 为不同的语言和硬件创建资源  3.6.5 运行时配置更改 ...

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

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

    Android高级编程.pdf

    3.4 Android应用程序生命周期 3.5 理解应用程序的优先级和进程状态 3.6 分离资源 3.6.1 创建资源 3.6.2 使用资源 3.6.3 To-DoList资源示例 3.6.4 为不同的语言和硬件创建资源 3.6.5 运行时配置更改 3.7 深入探讨...

    android下activity生命周期

    android下activity生命周期 生命周期: 回调 描述 onCreate() 这是第一个回调,在活动第一次创建是调用 onStart() 这个回调在活动为用户可见时被调用 onResume() 这个回调在应用程序与用户开始可交互的时候调用 ...

    android 横竖屏切换生命周期

    09-04 15:54:27.675: I/yxd(6708): 应用程序执行了============onPause===方法===>> 09-04 15:54:27.685: I/yxd(6708): 应用程序执行了============onStop===方法===>> 09-04 15:54:27.685: I/yxd(6708): 应用程序...

    Android中人为改变程序生命周期的研究.pdf

    Android中人为改变程序生命周期的研究.pdf

Global site tag (gtag.js) - Google Analytics