初学 Android
Android Process Lifecycle
Android系统内存不足时, 就需要把旧的或不需要用的应用程序移除. 如同之前的Activity生命周期所介绍, 这个移除的决定是由应用程序所处的状态来判断. 一般来说,当需要移除应用程序时, 系统将会做排序, 然后从最不重要的开始移除, 以下是移除时的考量顺序:
1. 最早被移除的是 Empty Process(空行程):
Empty process 是指那些没有跟Activity绑定, 也没有跟任何的应用程序组件(比如Service或IntentReceiver)绑定在一起的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 和 IntentReceiveer的Lifecycle. 要切记: 如果组件使用不当, 虽然正在进行重要的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: 一个Activity的Entire lifetime是由onCreate()开始, 一直到onDestroy()结束.
一个Activity可以把所有的资源设定写在onCreate中, 一直到onDestroy()时再释放出来.
2. Visible lifetime: 一个Activity的Visible 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 process、visible process、service process、background process 与 empty process。
4. Activity
Activity是Android开发中非常重要的一个基础类。就字面上来说, Activity 就是"活动"的意思. 可以简单的解释为, Activity 是一个与使用者互动的物件(object)。
举例来说:一个EMail程序,就可能包含三个activity: 有列出邮件的 Activity 1, 显示邮件内容的activity 2, 及 撰写邮件 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 类别就是手机的 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
分享到:
相关推荐
初学android程序练习源码,简单实用
20以内加减法运算练习(初学Android练习用,开发时从网上东拼西凑了一些代码并经整合调试通过,涉及GridView-动态数组-wav)
Android初学心得
Android eclipse画板绘制不同颜色图形,有助于初学Android的童鞋了解Android绘图机制
该资源适合安卓初学者拿来学习 其中一个没有引入任何jar包, 另外一个引入jar包 不同的设计模式和思路
初学android布局实例,部分复原微信朋友圈界面。
Android2初学者入门Android2初学者入门Android2初学者入门Android2初学者入门
android 初学者 学习资料 android 初学者 学习资料 android 初学者 学习资料 android 初学者 学习资料 android 初学者 学习资料 android 初学者 学习资料
Android eclipse开发各种dialog窗口详细代码,初学Android必看
适合android初学者的基本控件的小例子
android笔记初学者必看 包含代码和知识要点 为求职做好充分准备
初学android小游戏开发必学基础知识.pdf
android 经典代码例子 若干个 初学 入门 android例子 经典 实用 快速
网络上一些小伙伴写的一些关于Android版OpenCV的博客,大部分都模糊不清,基本就复制粘贴的,有些甚至没有实践就直接贴上去了,这样不仅误导初学的一些小伙伴,而且被其他小伙伴转载或者复制之后,会造成更大的影响...
android初学者学习源代码,计算器源代码,初学者可以看看这个例子
初学android的时候做的课程设计,数独,加了趣味性,加了数据库的应用,代码比较简单,但是多,所以对于初学者来说是比较好的东西,下载后请不要在转,谢谢!
我是一只课外有在初学android的菜鸟,这是我编写的一个主题为生日礼物的android应用小程序,送给一个初中好友。如今在不同大学上学,昔日好友少相聚了,祝她天天快乐!
这是些给初学者提供的源代码,可以帮助初学者尽快熟悉Android的体制。
对于初学android的人,是个不错的ppt