当前位置: 代码迷 >> Android >> android内存储器管理等
  详细解决方案

android内存储器管理等

热度:19   发布时间:2016-05-01 17:12:13.0
android内存管理等

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

?

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


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

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

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

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

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

Android?Activity生命周期简介
前面有提到何谓Activity:?最简单的就是把Activity看成一个User?Interface?Program.?它会提供使用者一个互动式的页面功能.?当然一个activity通常不只一个UI,?所有的Activity在系统里由Activity?stack?所管理,?当一个新的Activity被执行后,它将会被放置到stack的最顶端,并且变成"running?activity",?而之前的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状态的Application?List(应用程序列表).
Stopped状态的?Activity,还可以透过?Notification?来唤醒。以后再说明?Notification.


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

?


?

?

有三个主要?lifetime?:


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

?

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

?

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

?

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

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

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


再归纳一般?Android?Application遵循的动作流程:


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

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


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

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


回复原?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.?Android?Package?(.apk):
包含应用程序本身,以及相关的资源档桉。将?apk?套件下载到?Android?手机后,即可安装至手机上。Android?Development?Kit?可自动将?apk?套件下载至模拟器或实体手机。
记得前面我们在?Eclipse?中若要检视HelloWorld程序,?是利用?Package?Explorer?来查看整个程序的结构的.

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

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

4.?Activity
ActivityAndroid开发中非常重要的一个基础类。就字面上来说,?Activity?就是"活动"的意思.?可以简单的解释为,?Activity?是一个与使用者互动的物件(object)
举例来说:一个EMail程序,就可能包含三个activity:?有列出邮件的?Activity?1,?显示邮件内容的activity?2,?及?撰写邮件?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?类别就是手机的?User?Interface.?View?负责绘製UI与?event?(处理事件).?Android?利用?View?建立所谓的?Widgets(组件),?利用?Widget?就可以製作互动式的使用者介页面interactive?GUI).


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

(1)Applications?(应用程序)
(2)Application?Framework?(应用程序架构)
(3)Libraries?(函式库)
(4)Android?Runtime?(Android执行环境)
(5)Linux?Kernel?(Linux核心)

?

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

  相关解决方案