Android Activity生命周期解析

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Android Activity生命周期解析

摘要:Android(安致)操作系统应用包括四个部分:Activity活动,Intent Reciver,service和Content provider。其中,一个activity是应用中的一个单一的屏幕,它继承自Activity类,它将显示由Views组成的UI以及响应事件。

关键词:Android;Activity;生命周期

中图分类号:TP311.52 文献标识码:A文章编号:1007-9599 (2011) 10-0000-01

Android Activity Life Cycle Analysis

Li Jiajun

(China University of Mining&Technology Resources Institute,Xuzhou221000,China)

Abstract:Android operating system applications include four parts:Activity activity,Intent

Reciver,service,and Content provider.Among them,an activity is the application of a single screen,it inherits from the Activity class,it will show the composition of the Views UI,and respond to events.

Keywords:Android;Activity;Life cycle

Android(安致)底层以Linux内核工作为基础,

由C语言开发,只提供基本功能;中间层包括函数库Library和虚拟机Virtual Machine,由C++开发。最上层是各种应用软件,包括通话程序,短信程序等,应用软件则由各公司自行开发,以Java作为编写程序的一部分。

activity,在android四大天王模块中处于最基础

的地位,类似于JSP,相当于SWT中的Shell,View则相当于wegiet。每一个Activity都被实现为一个独立的类,并且从Activity基类中继承而来。Activity将显示

由Views组成的UI以及响应事件。相当一部分的应用程序都是由一个或者多个Activity组成。可以这样理解,Activity代表一个用户所能看到的屏幕,主要用于处理应用程序的整体性工作。

一、Android状态

一般来讲,某一时刻,Activity处在下面四个状态之一:

(一)Active(Running):已由用户启动,正在前台运行,处于栈的最顶端,能够与用户进行交互。

(二)Paused:已由用户启动,正在运行且可视,但是被另一个透明或者Dialog样式的Activity覆盖时

的状态。此时它仍与窗口管理器保持联系,系统还在继续维护其内部状态,但不能与activity进行互动。

(三)Stopped:已由用户启动,正在运行,但是由于其他activity而被隐藏,无法向用户直接呈现有效的信息,但是可以通过notification进行通信。

(四)Dead(Killed):activity没有启动或者终结,例如为了释放紧缺的内存空间。

二、Android栈管理

Android是通过一种Activity栈的方式来管理Activity的,一个Activity的实例的状态决定它在栈中的位置。处于前台的Activity总是在栈的顶端,当前台的Activity因为异常或其它原因被销毁时,处于栈第二层的Activity将被激活,上浮到栈顶。当用户或者系统启动新的Activity入栈时,原来顶层Activity会被压入到下一层。一个Activity的不同状态间的转换就是体现在其在栈中的位置变化。

三、Android内存释放

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

一个重要并且特殊的特性在Android中的体现就是,由系统控制一个应用的进程的生命周期。为了决

定在内存不足情况下销毁哪个进程,Android系统会选择在这个进程中所有活动的组件中重要等级最高的那个作为依据,并根据Activity所处的状态来改变其在栈中的位置。除了最顶层即处在Active状态的Activity 外,其它的Activity都有可能在系统内存不足时被回收,一个Activity的实例越是处在栈的底层,它被系统销毁的可能性越大。其原则大致如下:

(一)前端进程,通常情况下只有在设备已经达到了需要进行内存整理的状态,为了保障用户界面不停止响应,只能销毁这些进程。

(二)可视进程,除非为了保障所有的前端进程正常运行,这样的进程一般是不会被销毁的。

(三)服务进程,除非是为了保障前端进程和与用户进行交互的进程的正常运行时,系统才会销毁这种进程。

(四)后台进程,这些进程都会被保存在一个LRU 列表中,如果这些进程正确地完成了自己的生命周期,在内存不足时,系统会销毁用户最后看到的进程。

(五)空进程,这些进程只是作为一个缓存。作为其作用的体现,为了在空进程和底层的核心缓存之间平衡系统资源,系统会经常销毁这些空进程。

对于应用开发者来说,理解不同的应用组件(特

别是Activity、Service、Intent Receiver)对应用进程的生命周期的影响,这是非常重要的。如果用户没有正确地使用这些组件,将会导致正在处理重要工作的进程被系统销毁的后果。对于Activity生命周期,一个普遍的错误就是:当一个Intent Receiver在它的on Receive Intent()方法中,接收到一个intent后,就会从这个方法中返回。而一旦从这个方法返回以后,系统就会认为这个Intent Receiver不再处于活动状态,认为它的宿主进程不需要了。从而,系统随时都会销毁这个进程,回收内存,并中止其中还在运行的子线程。问题的解决办法就是,在Intent Receiver中,启动一个Service,这样系统就会知道在这个进程中,还有活动的工作正在执行。

参考文献:

[1]张华.android学习笔记.2007,12:4

[2]史子旺.android浅探.

[3]魏颖琪.android学习笔记.

[4]M.Tim Jones.GNU/Linux Application Programming.

相关文档
最新文档