AndroidProcessLifecycle
Android系统内存不足时,就需要把旧的或不需要用的应用程序移除.如同之前的Activity生命周期所介绍,这个移除的决定是由应用程序所处的状态来判断.一般来说,当需要移除应用程序,系统将会做排序,然后从最不重要的开始移除,以下是移除时的考量顺序:

1.最早被移除的是EmptyProcess(空行程):
Emptyprocess是指那些没有跟Activity绑定,也没有跟任何的应用程序组件(比如ServiceIntentReceiver)绑定在一起的process,这些空行程一定是最早被系统考虑移除的.


2.2顺位考虑被移除的是BackgroundActivity.
BackgroundActivity指这个activity是无法被使用者看到的的情况,表示Activity已处于stop的状态,系统移除这些Activity是安全的.通常有多个BackgroundActivity同时运行,这些Activity被存放在一个LRU(leastrecentused)list,系统可以根据LRUlist判断哪些Activity可以被移除,哪一个应该是最先被移除的.

3.3顺位被移除的是ServiceProcess.
Android应用程序,有一种没有UI的类别(android.app.Service),称之为Service.ServiceProcess通常是由startService()方式启动.简单来说,Service属于background(背景)程序,透过背景程序,我们可以製作一些不需要UI的功能,例如:在背景拨放音乐,上传或下载文件等.系统通常会保护它,除非真的没有内存可用.

4.接着轮到VisibleActivity/VisibleProcess:
VisibleProcess是一个可被Visible,但是没有显示在最上端(onPause被使用时).举例来说,当一个新的对话框Activity出现时,原来的Activity仍然visible,仍然被系统认为是重要的,通常不会被移除.但若不得不移除时,由于属于Paused状态,相对来说,它已经处于一个比较安全的位置.

5.最后被移除的是ForegroundActivity:
Foreground是一个在屏幕最上端与使用者做互动的Activity,它的优先权最高.原则上会是最后一个被移除的程序,除非这个Activity所需要的内存大小已经超出系统所能给的.系统之所以会移除这些程序,是为了不让使用者页面停止回应.

由于Android应用程序lifecycle并不是由程序本身直接控制的,而是由系统平台进行管理.所以对于开发者而言,许要了解不同组件Activity,SerivceIntentReceiveerLifecycle.要切记:如果组件使用不当,虽然正在进行重要的Process,仍有可能被系统主动移除.

AndroidActivity生命周期简介
前面有提到何谓Activity:最简单的就是把Activity看成一个UserInterfaceProgram.它会提供使用者一个互动式的页面功能.当然一个activity通常不只一个UI,所有的Activity在系统里由Activitystack所管理,当一个新的Activity被执行后,它将会被放置到stack的最顶端,并且变成"runningactivity",而之前的Activity原则上还是存在stack中,但不会是在foreground(前景)的情况.


一个Activity基本上有四个状态Active,Paused,Stopped,Dead:


Active(活动):
Active状态是使用者启动ApplicationActivity后,Activity在运行中的状态.
Android平台上,一个时刻只会有一个Activity处于ActiveRunning状态。其他的Activity都处于未Dead,Stopped或是Paused的状态.

Paused(暂停)
Paused状态是当Activity暂时暗下来,退到背景画面的状态.例如当电话来时,原本运行的Activity退到背景画面.新出现的页面组件盖住了原来的Activity画面.
Activity处在Paused状态时,使用者无法与原来的Activity互动.


Stopped(停止)
Stopped状态是有其他Activity正在执行,而这个Activity已经离开屏幕,不再动作的状态.
透过长按Home,可以叫出所有处于Stopped状态的ApplicationList(应用程序列表).
Stopped状态的Activity,还可以透过Notification来唤醒。以后再说明Notification.


Dead/Inactive(已回收或未启动)
Dead状态是Activity尚未被启动,已经被手动终止,或已经被系统回收的状态.
要手动终止Activity,可以在程序中呼叫finish函式.
如果是被系统回收,可能是因为内存不足,系统根据内存不足时的回收规则,将处于Stopped状态的Activity所佔用的内存回收.


有三个主要lifetime:


1.Entirelifetime:一个ActivityEntirelifetime是由onCreate()开始,一直到onDestroy()结束.
一个Activity可以把所有的资源设定写在onCreate,一直到onDestroy()时再释放出来.

2.Visiblelifetime:一个ActivityVisiblelifetime是指在onStart()onStop()之间.
在这段时间内,使用者可以在屏幕上看见Activity,要注意这个"Visible"是个形容,Activity不见得一定在foreground(前景)跟使用者直接互动.

3.Foregroundlifetime:一个ForegroundlifetimeonResume()onPause()之间.这个时期的Activity是在其他的Activity的前面,且可以直接跟使用者进行互动.所以这段时期指的就是图中的Activityisrunning.

简单的总结几个动作:
onCreate()用来做程序的初使化动作;

onDestory()通常都拿来把onCreate()时的资料做释放的动作;
onPause()时把需要保存的资料保存;

onResume()把保存的资料拿回来使用.


再归纳一般AndroidApplication遵循的动作流程:


一般启动:
onCreate->onStart->onResume

启动一个Activity的基本流程是:分配资源给这个Activity(onCreate),然后将Activity内容显示到屏幕(onStart),在一切就绪后,取得屏幕的控制权(onResume),使用者可以开始使用这个程序


呼叫另一个Activity:
onPause(1)->onCreate(2)->onStart(2)-onResume(2)->onStop(1)

先冻结原本的Activity,再交出直接存取屏幕能力(onPause)的过程.直到Activity2完成一般启动流程后,Activity1才会被停止.


回复原Activity
onPause(2)->onRestart(1)->onStart(1)->onResume(1)->onStop(2)->onDestroy(2)

Back键可以回到原本的Activity


退出/结束

onPause->onStop->onDestroy

如果程序中有直接呼叫finish函式来关闭Activity的话,系统会暂停(Pause),停止(Stop)然后销毁(Destroy)


回收后再启动
onCreate->onStart->onResume

被回收掉的Activity一旦又重新被呼叫时,会像一般启动一样再次呼叫ActivityonCreate函式.



几个Android的名词观念
在真正进入Android程序设计前,必须先了解以下几个名词观念。

1.AndroidPackage(.apk):
包含应用程序本身,以及相关的资源档桉。将apk套件下载到Android手机后,即可安装至手机上。AndroidDevelopmentKit可自动将apk套件下载至模拟器或实体手机。
记得前面我们在Eclipse中若要检视HelloWorld程序,是利用PackageExplorer来查看整个程序的结构的.

2.Task
Task"工作"的意思,可以看成Application(应用程序)本身.也就是手机上的应用程序的图示,使用者可点击图示启动task。从开发者的角度来看

3.Process
Process的定义上,指的是"执行中的程序",在AndroidApplication环境中,代表低阶的执行程序,属于Kernel部份。一个package的所有程序,都是在一个process中执行。
在一般情况下,Android应用程序都有一个自已的Process.Android系统裡,Process的生命周期(lifecycle)并不是直接由Android应用程序本身来决定,而是由系统来决定.
Androidprocess有五种类型:foregroundprocessvisibleprocessserviceprocessbackgroundprocessemptyprocess

4.Activity
ActivityAndroid开发中非常重要的一个基础类。就字面上来说,Activity就是"活动"的意思.可以简单的解释为,Activity是一个与使用者互动的物件(object)
举例来说:一个EMail程序,就可能包含三个activity:有列出邮件的Activity1,显示邮件内容的activity2,及撰写邮件activity3.
Activity大概可以分成四种生命状态:
一个Activity屏幕的最上层时(堆叠的最顶端),它就是属于activerunning的状态
如果一个Activity失去focus(焦点)但还看得到它的画面(例如:一个Activity画面是被盖掉部份画面或一个半透明的情况),这个Activity则处在paused的状态。这个失去焦点的Activity它还是完全活着的,并没有消失。(活着的意思是指,Activity本身所有的状态及资料都还是存在,与管理程序保持连繫).但这种pausedactivity,会在某些情况下消失,例如当系统的内存不够用时,系统会自动判断,把不重要的activity移除.

如果一个Activity被其它的Activity完全的遮住时,这个被遮的Activity处于stop的状态,但它仍然保有全部的状态及资料.由于它已不被使用者看见,所以它的画面是被隐藏起来的,当系统内存不足时,这种stop状态的activity是最先被系统考虑移除以释放内存.

当一个Activity处于pausestop的状态时,系统可以要求Activity结束(finish)或移除(kill).当它需要再度呈现在使用者面前时,它必需要能完整的重新启动(restart)及回复(resume)先前的状态。

5.View
简单来说,android.app.View类别就是手机的UserInterface.View负责绘製UIevent(处理事件).Android利用View建立所谓的Widgets(组件),利用Widget就可以製作互动式的使用者介页面interactiveGUI).


认识Android程序架构(2)
在进入程序内容分析之前,先了解一下Android软件架构
Android架构,总共是由5个部份来组成。分别是:

(1)Applications(应用程序)
(2)ApplicationFramework(应用程序架构)
(3)Libraries(函式库)
(4)AndroidRuntime(Android执行环境)
(5)LinuxKernel(Linux核心)

源地址:http://peng4602.iteye.com/blog/650160



更多相关文章

  1. 四步搞定Android(安卓)SDK环境
  2. 学习之Android运行原理
  3. Linux/Android——Input系统之frameworks层InputManagerService
  4. 开发前奏曲之添加Android(安卓)SDK平台工具
  5. android 如何把apk放进系统------unyaffs
  6. Android(安卓)EditText remove focus 只要頁面中有用到EditText
  7. Activity组件的启动过程
  8. 控制Android应用权限的五种方法
  9. Android(安卓)Windows 开发环境搭建教程

随机推荐

  1. Android 监听WiFi的开关状态实现代码
  2. 设置 Android wifi连接 samples【转】
  3. Android Zygote进程和SystemServer进程启
  4. Android: Requesting root access in you
  5. 网页拉起其他app
  6. android 设置APN
  7. Android Application Errors
  8. Android中Drawable、Bitmap、byte
  9. Android电池电量状态源码
  10. [Android]android.util.AndroidRuntimeEx