初学 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开发领域,初学者经常会遇到各种挑战,如理解基本组件、掌握布局设计、学习数据存储等。"初学者学习Android项目"这个资源为新手提供了一个极好的实践平台,通过两个具体的实例——“高仿多米音乐播放器”和...
在Android开发领域,初学者经常会通过实践项目来巩固学习,比如创建一个20以内加减法运算的练习应用。这个项目对于理解Android的基础组件和数据处理有很好的帮助。标题和描述提到的关键点主要包括“GridView”、...
"初学android程序练习源码"这个资源提供了一系列简单的源代码示例,旨在帮助新手熟悉Android应用开发的基本概念和常用技术。这些源码通常包括了Android应用程序的基础结构、用户界面设计、数据存储、网络通信等多个...
本文将深入探讨“初学Android的测试界面”这一主题,旨在为新手提供一个良好的起点,尤其是在图形界面设计方面。 首先,我们来看看“注册”这个概念。在Android应用中,注册通常涉及到用户账户的创建过程,包括收集...
在Android开发领域,初学者经常会遇到许多挑战,如理解基本的布局管理、列表视图的实现等。"Android几个初学者的小程序"这个资源恰好针对这些基础内容提供了实用的学习材料,帮助新手快速入门。 首先,Android的...
在Android开发领域,初学者经常会通过实践小例子来快速掌握基础知识。这个名为“Demo”的压缩包文件很可能是为Android新手设计的一系列实例代码,旨在帮助他们理解和应用Android平台上的基本UI控件。以下是对这些...
这个“初学android布局实例”显然是为了帮助新手理解和实践这些布局技术,特别是通过复原微信朋友圈界面来提供一个实际应用的例子。 1. **线性布局(LinearLayout)**:这是最基础的布局,可以将子视图沿水平或垂直...
android 初学者 学习资料 android 初学者 学习资料 android 初学者 学习资料 android 初学者 学习资料 android 初学者 学习资料 android 初学者 学习资料
在Android开发领域,初学者经常会接触到一系列核心概念和组件,这些是构建应用程序的基础。本教程主要聚焦于"旋转菜单"、"基本控件"、"Spinner"、"ListView"、"Toast"、"ProgressBar"以及"Handler"这七个关键知识点...
【标题】:“适合初学者的Android案例” 在Android开发领域,初学者往往需要从基础案例开始学习,逐步掌握各项核心功能的实现。本案例提供了一个简单的登录应用,它包括了多个关键组件和功能,是初学者理想的实践...
在Android开发领域,初学者经常会从简单的实例开始学习,以便快速掌握基础知识。"android例子,android初学教程"这个主题正适合这样的学习路径。这里,我们将会深入探讨FirstAndroid项目,这是一个非常适合新手入门的...
对于初学者来说,理解和熟练使用Android API是至关重要的。"android api 初学者必备"这个资源集合提供了全面的API指南,帮助新入行的开发者快速入门。 首先,我们来看`android_manual.doc`,这很可能是Android官方...
在Android开发领域,初学者经常会遇到如何实现实例化应用的基本功能,比如界面间的切换、访问电话本数据以及服务(Service)的后台运行。本文将详细介绍这些关键知识点,以帮助初学者快速上手。 首先,我们来看【两...
android笔记初学者必看 包含代码和知识要点 为求职做好充分准备
本书名为《Android多媒体编程从初学到精通》,由苗忠良等编著,是一本详细分析Android平台下多媒体编程的知识与技术的教材。该书详细讲解了从基础到进阶的Android多媒体编程技术,内容覆盖了多媒体开发的多个方面,...
在进入Android2初学者的世界之前,首先需要理解的是Android是什么。Android是由Google领导的一个开源操作系统,主要用于智能手机、平板电脑和智能电视等设备。它基于Linux内核,为开发者提供了丰富的API(应用程序...
初学android小游戏开发必学基础知识.pdf
在Android开发领域,计算器应用是初学者经常用来学习和实践编程技能的一个经典案例。这个"android初学者学习源代码,计算器源代码"提供了一个完整的示例,帮助开发者了解如何在Android环境中构建一个功能齐全的...
【初学者android应用小程序之生日礼物】 Android是一个广泛使用的移动操作系统,由Google开发并推广,它为开发者提供了丰富的工具和框架来创建各种类型的应用程序。对于初学者来说,学习Android编程是一个很好的...