`

初学 Android (转)

阅读更多

初学 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核心)

 

 

 


Android像是一种 software stack </sp

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics