android内存管理等
AndroidProcessLifecycle
Android系统内存不足时,就需要把旧的或不需要用的应用程序移除.如同之前的Activity生命周期所介绍,这个移除的决定是由应用程序所处的状态来判断.一般来说,当需要移除应用程序时,系统将会做排序,然后从最不重要的开始移除,以下是移除时的考量顺序:
1.最早被移除的是EmptyProcess(空行程):
Emptyprocess是指那些没有跟Activity绑定,也没有跟任何的应用程序组件(比如Service或IntentReceiver)绑定在一起的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,Serivce和IntentReceiveer的Lifecycle.要切记:如果组件使用不当,虽然正在进行重要的Process,仍有可能被系统主动移除.
AndroidActivity生命周期简介
前面有提到何谓Activity:最简单的就是把Activity看成一个UserInterfaceProgram.它会提供使用者一个互动式的页面功能.当然一个activity通常不只一个UI,所有的Activity在系统里由Activitystack所管理,当一个新的Activity被执行后,它将会被放置到stack的最顶端,并且变成"runningactivity",而之前的Activity原则上还是存在stack中,但不会是在foreground(前景)的情况.
一个Activity基本上有四个状态Active,Paused,Stopped,Dead:
Active(活动):
Active状态是使用者启动Application或Activity后,Activity在运行中的状态.
在Android平台上,一个时刻只会有一个Activity处于Active或Running状态。其他的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:一个Activity的Entirelifetime是由onCreate()开始,一直到onDestroy()结束.
一个Activity可以把所有的资源设定写在onCreate中,一直到onDestroy()时再释放出来.
2.Visiblelifetime:一个Activity的Visiblelifetime是指在onStart()到onStop()之间.
在这段时间内,使用者可以在屏幕上看见Activity,要注意这个"Visible"是个形容,Activity不见得一定在foreground(前景)跟使用者直接互动.
3.Foregroundlifetime:一个Foregroundlifetime指onResume()到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一旦又重新被呼叫时,会像一般启动一样再次呼叫Activity的onCreate函式.
几个Android的名词观念
在真正进入Android程序设计前,必须先了解以下几个名词观念。
1.AndroidPackage(.apk):
包含应用程序本身,以及相关的资源档桉。将apk套件下载到Android手机后,即可安装至手机上。AndroidDevelopmentKit可自动将apk套件下载至模拟器或实体手机。
记得前面我们在Eclipse中若要检视HelloWorld程序时,是利用PackageExplorer来查看整个程序的结构的.
2.Task
Task为"工作"的意思,可以看成Application(应用程序)本身.也就是手机上的应用程序的图示,使用者可点击图示启动task。从开发者的角度来看
3.Process
Process的定义上,指的是"执行中的程序",在Android的Application环境中,代表低阶的执行程序,属于Kernel部份。一个package的所有程序,都是在一个process中执行。
在一般情况下,Android应用程序都有一个自已的Process.在Android系统裡,Process的生命周期(lifecycle)并不是直接由Android应用程序本身来决定,而是由系统来决定.
Android的process有五种类型:foregroundprocess、visibleprocess、serviceprocess、backgroundprocess与emptyprocess。
4.Activity
Activity是Android开发中非常重要的一个基础类。就字面上来说,Activity就是"活动"的意思.可以简单的解释为,Activity是一个与使用者互动的物件(object)。
举例来说:一个EMail程序,就可能包含三个activity:有列出邮件的Activity1,显示邮件内容的activity2,及撰写邮件activity3.
Activity大概可以分成四种生命状态:
一个Activity在屏幕的最上层时(堆叠的最顶端),它就是属于active或running的状态
如果一个Activity失去focus(焦点)但还看得到它的画面(例如:一个Activity画面是被盖掉部份画面或一个半透明的情况),这个Activity则处在paused的状态。这个失去焦点的Activity它还是完全活着的,并没有消失。(活着的意思是指,Activity本身所有的状态及资料都还是存在,与管理程序保持连繫).但这种paused的activity,会在某些情况下消失,例如当系统的内存不够用时,系统会自动判断,把不重要的activity移除.
如果一个Activity被其它的Activity完全的遮住时,这个被遮的Activity处于stop的状态,但它仍然保有全部的状态及资料.由于它已不被使用者看见,所以它的画面是被隐藏起来的,当系统内存不足时,这种stop状态的activity是最先被系统考虑移除以释放内存.
当一个Activity处于pause或stop的状态时,系统可以要求Activity结束(finish)或移除(kill)它.当它需要再度呈现在使用者面前时,它必需要能完整的重新启动(restart)及回复(resume)先前的状态。
5.View
简单来说,android.app.View类别就是手机的UserInterface.View负责绘製UI与event(处理事件).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
更多相关文章
- 四步搞定Android(安卓)SDK环境
- 学习之Android运行原理
- Linux/Android——Input系统之frameworks层InputManagerService
- 开发前奏曲之添加Android(安卓)SDK平台工具
- android 如何把apk放进系统------unyaffs
- Android(安卓)EditText remove focus 只要頁面中有用到EditText
- Activity组件的启动过程
- 控制Android应用权限的五种方法
- Android(安卓)Windows 开发环境搭建教程