`

Android开发之旅:组件生命周期(一)

 
阅读更多

应用程序组件有一个生命周期——一开始Android实例化他们响应意图,直到结束实例被销毁。在这期间,他们有时候处于激活状态,有时候处于非激活状态;对于活动,对用户有时候可见,有时候不可见。组件生命周期将讨论活动、服务、广播接收者的生命周期——包括在生命周期中他们可能的状态、通知状态改变的方法、及这些状态的组件寄宿的进程被终结和实例被销毁的可能性。

本文主要讨论活动的生命周期及他们可能的状态、通知状态改变的方法。分为以下三部分:

  • 1、活动生命周期
  • 2、保存活动状态
  • 3、协调活动

1、活动生命周期

一个活动有三个基本状态:

  • 激活状态运行状态,这时它运行在屏幕的前台(处于当前任务活动栈的最上面)。这个活动有用户的操作的焦点。
  • 暂停状态,这时活动失去焦点但是它对用户仍可见。也就是说,另一个活动在它的上面且那个活动是透明的或者没有覆盖整个屏幕,因此通过它可以看见暂停状态的活动。一个暂停的活动完全是活着的(它维护着所有的状态和成员信息,且仍然依附在窗口管理器),但是当内存极小时可以被系统杀掉。
  • 停止状态,这时活动完全被其他活动掩盖。它仍然保留所有状态和成员信息,但是对用户它不可见,因此它的窗口时隐藏的且当其他地方需要内存时它往往被系统杀掉。

如果一个活动被暂停或停止,系统可以将它从内存移除,通过要求它结束(通过调用它的finish()方法),或简单地杀掉它的进程。当它再次显示给用户时,必须要完全重新启动和恢复到之前的状态。随着活动从一个状态转为另一个状态,通过调用下面的受保护的方法通知该改变:

  • void onCreate(Bundle saveInstanceState)
  • void onStart()
  • void onRestart()
  • void onResume()
  • void onPause()
  • void onStop()
  • void onDestroy()

所有这些方法都是钩子,你可以重写当状态改变时做适当的工作。所有的活动必须要实现onCreate()去做一些初始化的设置,当对象第一次实例化的时候。很多活动也会实现onPause()去提交数据修改或准备停止与用户交互。

将他们合并在一起,这七个方法定义了活动的整个生命周期。有三个嵌套的循环,你可以通过这七个方法监视:

  • 活动的整个生命时间,从第一次调用onCreate()开始直到调用onDestroy()结束。一个活动在onCreate()中做所有的“全局”状态的初始设置,在onDestroy()中释放所有保留的资源。举例来说,有一个线程运行在后台从网络上下载数据,它可能会在onCreate()中创建线程,在onDestroy()中结束线程。
  • 活动的可视生命时间,从调用onStart()到相应的调用onStop() 。在这期间,用户可以在屏幕上看见活动,虽然它可能不是运行在前台且与用户交互。在这两个方法之间,你可以保持显示活动所需要的资源。举例来说,你可以在onStart()中注册一个广播接收者监视影响你的UI的改变,在onStop() 中注销。因为活动在可视和隐藏之间来回切换,onStart()onStop()  可以调用多次。
  • 活动的前台生命时间,从调用onResume()到相应的调用onPause()。在这期间,频繁地在重用和暂停状态转换——例如,当设备进入睡眠状态或一个新的活动启动时调用onPause(),当一个活动返回或一个新的意图被传输时调用onResume()。因此,这两个方法的代码应当是相当轻量级的。

下面这个图解释了这三个循环和状态之间状态的可能路径。着色的椭圆表示活动的主要状态,矩形表示当活动在状态之间转换时你可以执行的回调方法。

activity_lifecycle

 

 

 

 

 

 

 

 

图1、活动生命周期(来源:Android SDK)

下面的表格对每个方法更详细的描述和在活动的整个生命周期中的定位。

t1t2

注意上面表格的Killable列,它表示当方法返回时没有执行活动的其它代码,系统是否能杀死活动寄宿的进程。三个方法(onPause()onStop()onDestroy())标记为Yes。因为onPause()是唯一一个保证在进程被杀之前会调用的,因此你应该使用onPause()来写任何持久化存储数据。

被标记为No的方法保护活动寄宿的进程在他们调用的时候不会被杀掉。因此活动是可杀掉状态,例如onPause()返回到onResume()调用期间。直到onPause()再次返回,活动是不可杀掉的。其实,没有标记为Killable的活动也是可以系统被杀掉的,不过这仅仅发生在极端困难的情况下,没有有任何其他资源可用。

2、保存活动状态

当系统而不是用户关闭一个活动来节省内存时,用户可能希望返回到活动且是它之前的状态。为了获得活动被杀之前的状态,你可以执行活动的onSaveInstanceState()方法。Android在活动容易被销毁前调用这个方法,也就是调用onPause()之前。该方法的参数是一个Bundle对象,在这个对象你可以以名值对记录活动的动态状态。当活动再次启动时,Bundle同时被传递到onCreate()和调用onCreate()之后的方法,onRestoreInstanceState(),因此使用一个或两个可以重新创建捕获的状态。

因为onSaveInstanceState()方法不总是被调用,你应该仅使用onSaveInstanceState()它来记录活动的临时状态,而不是持久的数据。应该使用onPause()来存储持久数据。

3、协调活动

当一个活动启动另一个活动,他们都经历生命周期转换。一个暂停或许是停止,然而另一个启动。有时,你可能需要协调这些活动。生命周期的回调顺序是明确界定的,特别是当这两个活动在同一个进程中:

  1. 当前活动的onPause()方法被调用。
  2. 接下来,启动活动的onCreate()onStart()onResume()方法按序被调用。
  3. 然后,如果获得不再在屏幕上可见,它的onStop()方法被调用。

修正:第一节——活动生命周期中的表格第一、二行中的第二列(description)中的onRestart()应该为onStart()。

 

后续文章地址:

http://www.cnblogs.com/skynet/archive/2010/05/05/1727645.html

分享到:
评论

相关推荐

    Android开发之旅

    Android开发之旅:组件生命周期(一) 8 Android开发之旅:组件生命周期(二) 9 Android开发之旅:组件生命周期(三) 10 Android 开发之旅:又见Hello World!11 Android 开发之旅:深入分析布局文件&又是...

    Android开发之旅:HelloWorld项目的目录结构.pdf

    `onCreate`方法是Activity生命周期中的关键方法,用于初始化活动,例如加载布局文件和设置UI元素。 2. **gen文件夹**:这个文件夹包含由Android编译系统自动生成的R.java文件。R.java是一个内部类,包含了对项目中...

    Android开发之旅:HelloWorld项目的目录结构

    `Bundle`用于在不同方法之间传递数据,例如在活动生命周期的不同阶段保存和恢复状态。 2. **gen 文件夹**:这个文件夹下的`R.java`文件是自动生成的,包含了对项目资源的引用。`R`类包含了各种资源(如布局、图片、...

    Android开发之旅 完整版pdf

    #### 七、组件生命周期 **7.1 生命周期概述** - 组件的生命周期是指组件从创建到销毁的过程。 - 不同类型的组件有不同的生命周期方法。 **7.2 示例方法** - **onCreate()**: 当组件被创建时调用。 - **onStart()...

    android开发之旅9.pdf

    【Android 开发之旅:组件生命周期】(二) - 服务和服务生命周期 在Android应用开发中,服务(Service)是四大组件之一,它负责在后台执行长时间运行的操作而不提供用户界面。服务生命周期的理解对于优化应用程序...

    Android开发关键技术之旅:Java程序员快速学习通道

    根据提供的文件信息,本文将围绕“Android开发关键技术之旅:Java程序员快速学习通道”这一主题进行深入探讨,并结合Java编程背景,解析与Android开发相关的重点技术和实践路径。 ### Android开发的关键技术概览 #...

    Android开发之旅——完整版

    【Android 开发之旅:环境搭建】 在Android开发的初期阶段,首要任务是建立一个完整的开发环境。这包括安装Java Development Kit (JDK),Eclipse集成开发环境,Android Software Development Kit (SDK)以及Android ...

    Android平台开发之旅源码

    15. **Android权限模型和组件通信机制**:深入理解Android的权限模型,如四大组件(Activity、Service、BroadcastReceiver、ContentProvider)的生命周期和通信机制。 通过分析和运行这些源码,开发者不仅可以学习...

    Android平台开发之旅(第2版)光盘

    《Android平台开发之旅(第2版)光盘》是一本深度探索Android开发的书籍,针对Android 3/4系统的新特性进行了详细的解析。这本书旨在通过实际的开发案例,帮助读者理解并掌握Android平台开发的基本概念、实用技术...

    Android开发之旅(2):android架构.rar

    在Android开发之旅(2):android架构的主题中,我们将深入探讨Android系统的架构,这是一个复杂的多层次设计,涵盖了操作系统、中间件层、应用程序框架以及各种应用程序。Android的架构是其强大功能和灵活性的基础,...

    Android平台开发之旅(第2版).pdf

    根据提供的文件信息,“Android平台开发之旅(第2版).pdf”这一资料似乎是一本关于Android应用开发的专业书籍。虽然给出的部分内容并未包含实际的知识点,但从书名和描述来看,我们可以推断出这本书可能覆盖的一些...

    Android平台开发之旅(第2版)

    根据提供的标题、描述和部分上下文内容,“Android平台开发之旅(第2版)”这本书主要聚焦于Android平台的应用程序开发。虽然提供的部分内容并没有直接涉及到具体的Android开发知识点,但我们可以基于书名和主题,来...

    android开发之旅11[参照].pdf

    在Android开发之旅中,我们已经探索了许多核心概念和组件,为深入学习打下了坚实的基础。首先,我们了解了Android应用程序的基本目录结构,其中包括src、gen、Android x、assets、AndroidManifest.xml以及default....

    Android开发之旅(2):android架构.pdf

    它包含了Activity Manager(负责应用生命周期管理)、Content Providers(用于数据共享)、Intent机制(用于应用间通信)以及View系统(构建用户界面)等核心组件。这一层极大地简化了应用开发,并确保了不同应用间...

    老罗的android之旅导读ppt

    【老罗的Android之旅导读PPT】是一份旨在帮助用户深入了解Android操作系统的教育资源,由知名IT人士老罗精心制作。这份PPT旨在提升大家对于Android系统底层机制、应用开发以及系统优化等方面的理解,适合Android...

    android开发之旅3.pdf

    在Android开发之旅中,深入理解Android系统的架构是至关重要的。本篇主要探讨Android系统架构的五个核心组成部分:Linux Kernel、Android Runtime、Libraries、Application Framework和Applications。 1. **Linux ...

    Android平台开发之旅代码2

    在Android平台开发之旅的代码2中,我们深入探讨了Android应用程序开发的关键方面,这包括了多个章节的源码,从初级到高级的概念和技术。每个章节的文件命名(如ch12、ch13等)代表了不同的主题,下面将详细阐述这些...

    老罗Android之旅系列课件

    《老罗的Android之旅》是一套深受Android开发者欢迎的学习资源,由知名技术讲师老罗精心制作。这个压缩包集合了该课程的多个关键主题的PPT文件,旨在为那些希望深入理解Android系统的开发者提供一站式学习材料。以下...

    老罗Android之旅课件.zip

    《老罗Android之旅》是一套全面讲解Android技术的教程,主要涵盖了Android系统的基本概念、专用驱动、安全机制以及应用程序UI架构等多个重要知识点。通过这套课程,我们可以深入理解Android开发的核心要素,提升自己...

    金典的老罗的android之旅

    **金典的老罗的android之旅**是一段深入探索Android世界的精彩旅程,专为对Android开发感兴趣的初学者和进阶者量身打造。这个资源集合涵盖了Android开发的关键领域,旨在通过一系列精心编排的PPT文档,帮助学习者...

Global site tag (gtag.js) - Google Analytics