Android官方开发教程中文版(四)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Android官方开发教程中文版
管理Activity的生存周期
管理Activity的生存周期
当用户通过导航离开然后又返回你的App,App的Activity实例在它们的生存周期内在两个不同的状态之间转换。例如,Activity首次启动时成为系统的前台并接受用户的关注,在这个过程中,Android系统在你的Activity上调用一系列生命周期方法设置用户界面和其它组件。如果用户执行了一个启动另一个Activity或切换到其它App的动作,系统调用生命周期的其它方法把Activity移到后台(Activity不再可见,但实例和状态仍然完好无损)。
在生命周期的回调方法中,你可以定义当用户离开和重新进入Activity时,Activity的行为。例如,如果你正在创建一个流媒体视频播放器,当用户切换到其它App时,你可以暂停视频并中断网络连接。当用户返回时,你再重新连接网络并允许用户从暂停点恢复播放。
本课程解释了重要的生命周期回调方法,每个Activity实例接收和如何使用它们,使Activity执行用户期望的结果,并且当Activity不需要它们时,不会消耗系统资源。
启动Activity
不像其它编程范例由main()方法启动,Android系统在Activity中通过调用对应生命周期特定阶段的回调方法来启动代码。在启动Activity时有一系列的回调方法,销毁Activity时也有一系列的回调方法。
本节内容提供了大部分重要的生命周期方法的概览,并且展示了在创建Activity的新实例时如何处理首个生命周期的回调。
理解生命周期回调
在Activity的生存期内,系统在一个阶梯状金字塔的序列中调用核心的生命周期方法。也就是说,Activity生命周期的每一个阶段都是这个金字塔上的一个台阶。随着系统创建新的Activity实例,每个回调方法都把Activity的状态向顶部移动一步,当到达顶部时,Activity 运行在前台并可以和用户交互。
当用户开始离开Activity时,系统调用其它的回调方法把Activity的状态返回到金字塔底部以消除Activity。在某些情况下,Activity仅仅移动到金字塔的中间并等待(例如用户切换到其它App),Activity可以从这里回到顶部(如果用户返回了Activity)并且从用户离开的地方恢复。
根据Activity 的复杂度,你可能不需要实现所有的生命周期方法。不管怎样,重要的是你要理解每个回调方法并能实现它们,以确保你的App 表现得如用户期望的那样。正确地实现Activity 的生命周期方法以确保你的App 在以下几个方面表现良好,包括:
● 用户在使用你的App 时接到电话或切换到其它App 时,不能崩溃。
● 用户不再和App 频繁交互时,不能浪费宝贵的系统资源。
● 当用户离开App 并在稍后返回时,不能丢失用户的进程。
● 当屏幕在水平和垂直方向间切换时,用户的进程不能丢失或崩溃。
在接下的课程中你将学习到,Activity 在图一所示的不同状态间转换的几种情况。任何情况下,这些状态中只有三个会静止不变,也就是说,同一时间只能存在以下三个状态中的一个:
Resumed
这个状态下,Activity 运行在前台,并且用户可以和它交互(有时也被称为“Running ”状态)。
Paused
这个状态下,Activity 被另一个Activity 部分遮盖——另一个Activity 运行在前台,并且背景是半透明的或者没有覆盖整个屏幕。暂停的Activity 不会接收用户输入,也不会执行任何代码。
Stopped
这个状态下,Activity 完全隐藏并对用户不可见,它被认为处于后台。当停止时,Activity 实例以及它所有的状态信息,如成员变量仍然保持,但不会执行任何代码。 其它状态(Create 和Started )非常短暂,系统通过调用下一个生命周期方法,很快从它们移动到下一个状态。也就是说,系统调用onCreate()之后,很快调用onStart(),接着又立即调用onResume()。
这就是Activity 生命周期的基本知识,现在你要开始学习某些特定的生命周期行为。 指定你的App 的启动Activity
当用户从Home 屏幕上选择你的App 图标时,系统在App 内为你声明的“执行”(或“主”)Activity 调用onCreate()方法。这是你的App 用户界面的主入口点。
图一:用阶梯状金字塔图解Activity 生命周期。展示了每个回调方法是如何使Activity 向顶部的Resume 状态靠近,还有把Activity 带回到底部的回调方法。Activity 也可以从Paused 和Stopped 状态回到Resumed 状态。
你可以在Android清单文件中声明哪个Activity成为你的主Activity,AndroidManifest.xml 文件在你的项目根目录中。
App的主Activity必须在清单文件的
注意:当你使用Android SDK工具创建Android项目时,默认的项目文件就包括一个用这个过滤器(filter)声明在清单文件中的Activity类。
如果你所有的Activity都没有包含值为MAIN的action和值为LAUNCHAR的category属性,那么你的App图标不会出现在Home屏幕的App列表中。
创建新实例
大多数App都包含了几个Activity以允许执行不同的操作。无论是由用户点击App图标时创建的主Activity,还是你的App在响应用户操作时启动的Activity,系统都会调用onCreate()方法创建Activity的实例。
你必须实现onCreate()方法来执行基本的应用程序启动逻辑,这些逻辑在Activity的整个生存期内只会发生一次。比如,你的onCreate()方法应该定义用户界面和实例化某些类变量。
下例演示了为Activity执行某些基本设置的部分代码,如定义用户界面(在XML布局文件中声明),声明成员变量以及配置某些UI。
TextView mTextView; // 布局中文本视图的成员变量
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//为当前Activity设置用户界面
// 布局文件定义在项目的res/layout/main_activity.xml 文件中
setContentView(yout.main_activity);
// 初始化TextView成员,这样我们可以在后面操作它
mTextView = (TextView) findViewById(R.id.text_message);
// 确保我们运行在Honeycomb或更高版本下,以便使用操作栏API
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
// 对主Activity,确保App的图标在操作栏中
// 不要看起来象个按纽
ActionBar actionBar = getActionBar();
actionBar.setHomeButtonEnabled(false);
}