1、第 7 讲,深入理解Activity,纲要,建立、配置和使用Activity Activity的回调机制 Activity的生命周期 小结,1、建立、配置和使用Activity,Activity是Android应用中最重要、最常见的应用组件。实际应用中,包含多个Activity,实现不同的Activity向用户呈现不同的操作界面。Android应用的多个Activity组成Activity栈,当前活动的Activity位于栈顶。 Activity的作用 用户与应用程序交互的接口; 作为放置控件的容器。 在Activity中添加的控件,程序中通过findViewById(int id)方法,来获
2、取所添加的控件,不过这些组件都要有一个ID。 接下来详细介绍Activity开发、配置和使用。,1、建立、配置和使用Activity,1.1 建立Activity建立一个Activity的步骤如下: 建立Activity需要继承Activity基类,根据不同的需要,有时也需要继承Activity的子类。 需要复写onCreate()方法(由应用程序的框架调用)。 每一个Activity必须在AndroidManifest.XML文件中进行配置为Activity添加必要的控件。 实例7.1 LaucherActivity的使用(P171)。,标签,1、建立、配置和使用Activity,1、建立、
3、配置和使用Activity,上面的程序中用到了两个Activity。 ExpandableListActivityTest:它是ExpandableListActivity的子类,用于显示一个可展开的列表窗口。 PreferenceActivityTest:它是PreferenceActivity的子类,用于显示一个显示设置选项参数并进行保存的窗口。 先看ExpandableListActivityTest,它继承了ExpandableListActivity基类,其使用主要是为该Activity传入一个ExpandableListAdapter对象,ExpandableListActivit
4、y将会生成一个显示可展开的列表的窗口。 接下来看一下ExpandableListActivityTest的代码,1、建立、配置和使用Activity,1、建立、配置和使用Activity,如果我们要建立一个Activity专门用于设置选项参数,那么这个类可继承PreferenceActivity。一旦一个Activity继承了PreferenceActivity,那么该类完全不需要再控制Preferences的读写, PreferenceActivity为做好这一切。 使用PreferenceActivity与众不同的一点是,它的界面布局不再使用普通的XxxLayout作为根元素,而是使用Pr
5、eferenceScreen作为根元素,它表明定义一个参数设置的界面布局。,1、建立、配置和使用Activity,1、建立、配置和使用Activity,1、建立、配置和使用Activity,1、建立、配置和使用Activity,在定义了参数设置界面布局文件之后,接下来在Activity程序中使用该界面布局文件进行参数设置、保存,步骤如下: 让Activity继承PreferenceActivity。 在onCreate(Bundle savedInstanceState)方法中调用addPreferencesFromResource()方法加载指定的界面布局文件。,1、建立、配置和使用Acti
6、vity,1、建立、配置和使用Activity,1.2 配置Activity Android应用要求所有应用程序组件都必须显示进行配置。 为了在AndroidManifest.xml文件中配置、管理Activity,只要为元素添加子元素即可配置Activity。,1、建立、配置和使用Activity,1.3 启动、关闭Activity 一个Android应用通常都会包括多个Activity,但只有一个Activity会作为程序的入口,该Activity会在Android应用运行时,自动启动并执行。至于应用中的其他的Activity,通常由入口Activity启动。Activity启动其他Act
7、ivity有如下两种方法。 startActivity(Intent intent);启动其他的Activity。 startActivityForResult(Intent intent,int requestCode ):以指定请求码(requestCode)启动Activity,而且程序将会等到新启动Activity的结果(通过重写onActivityResult()方法来获取)。,1、建立、配置和使用Activity,Android为关闭Activity准备了如下两个方法。 finish():结束当前Activity finishActivity(int requestCode):结束
8、以startActivityForResult(Intent intent,int requestCode )方法启动的Activity。 例7.2 两个Activity之间的切换(P180)。,1、建立、配置和使用Activity,1、建立、配置和使用Activity,1、建立、配置和使用Activity,1.4 使用Bundle在Activity之间交换数据 当一个Activity启动另一个Activity时,常常会有一些数据要传递过去,在Android中,需要传递的数据放在对象Intent中。 Intent提供了多个重载的方法来携带额外的数据。 putExtras(Bundle data
9、):向Intent中放入需要携带的数据。 方法中的Bundle是数据携带包,提供了多个方法存入数据 putXxx(String key,Xxx data):向Bundle中放入各种类型数据。 putSerializable(String key,Serializable data):向Bundle中放入一个可序列化的对象。 为了取出Bundle数据携带包里的数据,Bundle提供如下方法。 getXxx(String key):从Bundle取出Int、Long等各数据类型数据。 getSerializable(String key,Serializable data):从Bundle取出一个
10、可序列化的对象。,1、建立、配置和使用Activity,例7.3 用第二个Activity处理注册信息(P182)。,1、建立、配置和使用Activity,1、建立、配置和使用Activity,1.5 启动其他Activity并返回结果 Activity提供了一个startActivityForResult(Intent intent,int requestCode )方法来启动其他Activity。该方法用于启动指定的Activity,而且期望获取指定Activity返回的结果。 为了获取被启动的Activity所返回的结果,当前Activity需要重写onActivityResult(in
11、t requestCode,int resultCode,Intent intent)。 一个Activity中可能包含多个按钮,并调用startActivityForResult()方法来打开多个不同的Activity处理不同的业务。当这些新Activity关闭时,系统都会调用前面Activity的onActivityResult(int requestCode,int resultCode,Intent intent)方法,利用request Code区分是哪个请求结果触发的,利用resultCode区分返回的数据来自哪个新的Activity。,1、建立、配置和使用Activity,例7.
12、4 用第二个Activity让用户选择信息(P186)。,1、建立、配置和使用Activity,1、建立、配置和使用Activity,1、建立、配置和使用Activity,2、Activity的回调机制,Activity被开发出来,开发者只要在AndroidManifest.xml文件配置该Activity即可,至于该Activity何时被实例化,方法何时被调用,对开者来说是完全透明的。前面介绍了事件的回调机制, Activity的回调机制也类似,当Activity被部署在Android应用中之后,随着应用的运行, Activity会不断地在不同的状态之间切换,该Activity中特定的方法就
13、会被回调,3、Activity的生命周期,当Activity处于Android应用中运行时,它的活动状态由Android以Activity栈的形式管理。当前活动的Activity位于栈顶随着不同应用的运行,每个Activity都有可能从活动状态转入到非活动状态,也可以从非活动状态转入到活动状态。 Activity大致会经过如下四个状态。 活动状态:当前Activity位于前台,用户可见,可以获得焦点 暂停状态:其他Activity位于前台,该Activity依然可见,只是不能获得焦点。 停止状态:该Activity不可见,失去焦点。 销毁状态:该Activity结束,或Activity所在Da
14、lvik进程结束。Activity生命周期及相关回调方法如下图所示。,3、Activity的生命周期,3、Activity的生命周期,在Activity的生命周期中,如下方法会被系统回调。 onCreate(Bundle savedStasus):创建Activity时被回调。 onStart():启动Activity时被回调。 onRestart():重新启动Activity时被回调。 onResume ():恢复Activity时被回调。 onPause():暂停Activity时被回调。 onStop():停止Activity时被回调。 onDestroy():销毁Activity时被回
15、调。例7.5 Activity的生命周期(P192)。,3、Activity的生命周期,3、Activity的生命周期,4、小结,本讲详细的介绍了Android四大组件之一:Activity。一个Android应用将会包含多个Activity,每个Activity通常对应着一个窗口。重点掌握如何开发Activity、如何在AndroidManifest.xml文件中配置Activity。另外还要掌握启动其他Activity的方法,包括利用Bundle在不同的Activity之间通信,启动其他Activity并返回结果等; Activity在Android系统中运行,具有生命周期,因此还需要清晰地了解Activity的生命周期。,