本章内容
第1节 Activity生命周期
第2节 列表Activity
本章目标
掌握Activity的生命周期
熟练掌握生命周期回调方法的执行时刻。
熟练掌握生命周期方法的应用。
熟练掌握ListActivity的应用。
Activity介绍
l对于任何一个Android应用程序来讲,Activity类都是其核心组成部分。许多时候,在应用程序中,你将会为每一个屏幕显示定义和实现一个Activity。
例如,一个简单的游戏应用程序可能会包含以5个Activity:

Activity的生命周期
Android操作系统允许同时运行多个应用程序,但同一时间只能有一个Activity处于前台
Android操作系统跟踪所有运行的Activity对象,并将这些对象放进一个Activity栈中,当一个新的Activity启动时,处于栈顶的Activity将会暂停,而这个新的Activity则放入栈顶。当这一新的Activity完成时,它从栈中被移除,而先前的Activity则又回到栈顶

l与独立运行的应用程序不同,Activity没有main函数
lActivity在生命周期的不同阶段将会执行不同的回调函数
l常用的回调函数如下:
ØonCreate():初始化用户界面相关内容
ØonStart()
ØonResume():初始化和接收Activity数据
ØonPause():停止、保存和释放Activity数据
ØonStop()
ØonRestart()
lActivity只会停留在Resumed、Paused、Stopped三种状态
l其他状态都会在回调函数执行完成之后立刻进入下一个状态
•


u通过桌面图标启动的Activity必须用<intent-filter>声明如下:
<activity android:name=".MainActivity“ android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
一个应用中如果没有定义MAIN或者LAUNCHER的Activity,主界面和应用菜单中都不会出现该应用的图标,整个Activity的运行过程中onCreate只运行一次,应该在onCreate中初始化用户界面相关的内容
一个正在运行的应用遇到如下情况时将会暂停(执行onPause),当一个半透明的Activity打开时,比如,某个后台服务弹出了一个对话框,此时当前的Activity被部分遮挡
当Activity从后台再次被切换到前台来的时候(执行onResume)
在应用进入暂停状态时,onPause回调函数将执行,在onPause中应该执行适当的资源释放任务,比如,释放摄像头资源停止视频播放,但不要在onPause中执行耗时操作,比如保存当前状态任何长时间消耗CPU的动作
当前Activity常常会因为如下情况而停止(onPause->onStop),用户按下Home键,进入主界面
另一个Activity被启动,完全遮住了当前Activity
运行中有电话呼入,当另一个应用退出或用户选择了桌面图标重新启动时
onRestart、onStart、onResume会被顺序执行
uonStop方法中应该尽量释放所有资源
因为有些极端情况下,onDestroy可能不会执行
虽然在此之前,onPause会执行,但是耗时的操作还是应该写在这里
当Activity再次启动时
虽然onRestart会执行,但是恢复资源的操作应该写在onStart里面
因为第一次启动Activity是onStart也会执行
有时候,系统为了获得足够的内存会销毁后台的Activity
销毁时,系统会存储一些信息(执行onSaveInstanceState)
•onRestoreInstanceState和onCreate都会得到这些信息

有时候,系统为了获得足够的内存会销毁后台的Activity
比如横竖屏切换时
销毁时,系统会存储一些信息(执行onSaveInstanceState)
这时,可以通过程序存储必要的信息
在重新启动Activity时会传回这些信息
这时onRestoreInstanceState和onCreate都会得到这些信息
lonCreate在第一次创建时也会执行
所以数据的恢复任务应该在onCreate写更好
ListActivity是一个默认包含一个ListView的Activity
写一个类继承ListActivity就获得了包含ListView的Activity
通过setListAdapter方法可以为ListView提供适配器
通过getListView可以获得ListView的对象
调用其中的setEmptyView的方法可以设置ListView为空时的显示视图
ListActivity默认注册了OnItemClickListener
需要处理事件时只需要覆盖onListItemClick方法就可以了
public class MyListActivityextendsListActivity{
@Override
protectedvoid onCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
List<String>list = new ArrayList<String>();
list.add("北京");
list.add("上海");
list.add("广州");
ArrayAdapteradapter = newArrayAdapter(this,android.R.layout.simple_list_item_1,list);
setListAdapter(adapter);
}
}
首选项的作用
u首选项指的是应用程序的配置选项
u主要用来配置功能设置
Ø通常设置成用/不用、是/不是
Ø或者设置名称、选择项等等
u几乎所有的应用都需要使用配置
u配置选项的界面特点都是类似的
Ø如右图示例所示
uAndroid为配置选项提供了基础类
ØPreferenceActivity
