以下内容中有相当部分摘自网络,加上了一些我个人的见解,主要是为了记录自己的学习历程。
- Activity可以理解为一个应用程序。在 Android 中,所有的应用程序“生来就是平等的”,所以不光 Android 的核心程序,任何一个应用都可以发出一个请求(intent )来启动另外一个应用(activity)。Android 的这种设计非常有利于“程序部件”的重用。
- Activity的生命周期是由系统控制而非程序自身直接控制。这点和Java的垃圾回收机制很像。(现在进程也可以回收了!)
- 一个即将被系统关闭的程序是系统在内存不足(low memory)时,根据“重要性”选出来的“牺牲品”。 各种进程按照重要性从高到低排列如下:
-
- 前台进程。这样的进程拥有一个在屏幕上显示并和用户交互的 activity 或者它的一个IntentReciver 正在运行。这样的程序重要性最高,只有在系统内存非常低,万不得已时才会被结束。
- 可见进程。在屏幕上显示,但是不在前台的程序。比如一个前台进程以对话框的形式显示在该进程前面。这样的进程也很重要,它们只有在系统没有足够内存运行所有前台进程时,才会被结束。
- 服务进程。这样的进程在后台持续运行,比如后台音乐播放、后台数据上传下载等。这样的进程对用户来说一般很有用,所以只有当系统没有足够内存来维持所有的前台和可见进程时,才会被结束。
- 后台进程。这样的程序拥有一个用户不可见的 activity。这样的程序在系统内存不足时,按照 LRU (LRU 是Least Recently Used的缩写,即最近最少使用页面置换算法,是 为虚拟页式存储管理服务的。)的顺序被结束。
- 空进程。这样的进程不包含任何活动的程序部件。系统可能随时关闭这类进程。
- Activity在生命周期中可能有如下状态:
-
- Active/Runing 一个新 Activity 启动入栈后,它在屏幕最前端,处于栈的最顶端,此时它处于可见并可和用户交互的激活状态。
- Paused 当 Activity 被另一个透明或者 Dialog 样式的 Activity 覆盖时的状态。此时它依然与窗口管理器保持连接,系统继续维护其内部状态,所以它仍然可见,但它已经失去了焦点故不可与用户交互。
- Stoped 当 Activity 被另外一个 Activity 覆盖、失去焦点并不可见时处于 Stop ed 状态。
- Destroyed Activity 被系统杀死回收或者没有被启动时处于 Destroyed 状态。
- Activity的生命周期如图:
在Android 2.2平台上我们发现
首次运行程序发生如下事件(通过对相应事件处理打印log得知):
onCreate、onStart、onResume
按HOME键会发生如下事件:
onPause、onStop
按返回键会发生如下事件:
onPause、onStop、onDestroy