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
Activity是 Android 开发中非常重要的一个基础类。就字面上来说 , 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值