深入理解Activity

来源:互联网 发布:linux udp 发送广播包 编辑:程序博客网 时间:2024/06/05 11:01

1、建立Activity

建立自己的Activity需要继承Activity基类,当然,在不同应用场景下,有时也要求继承Activity的子类。例如如果应用程序界面只包括列表,则可以让应用程序继承ListActivity;如果应用程序界面需要实现标签页效果,则可以让应用程序继承TabActivity。

2、启动、关闭Activity

Activity启动其它Activity有如下两个方法:

a、startActivity(Intent intent):启动其它Activity

b、startActivityForResult(Intent intent,intrequestCode):以指定请求码(requestCode)启动Activity,而且程序将会等到新启动Activity的结果(通过重写onActivityResult(...)方法来获取)

      启动Activity时可指定一个requestCode参数,该参数代表了启动Activity的请求码。这个请求码的值由开发者跟据业务自行设置,用于标识请求来源。

想要启动哪个组件,被启动的组件既可是Activity组件,也可是Service组件。

Android为关闭Activity准备了如下两个方法:

a、finish():结束当前Activity

b、finishActivity(int requestCode):结束以startActivityForResult(Intent intent,int requestCode)方法启动的Activity

3、使用Bundle在Activity之间交换数据

当一个Activity启动另一个Activity时,常常会有一些数据需要传过去。对于Activity而言,在Activity之间进行数据交换更简单:因为两个Activity之间本来就有一个“信使”:intent,因此我们主要将需要交换的数据放入Intent即可。

Intent提供了多个重载的方法来“携带”额外的数据:

putExtras(Bundle  data):向intent中放入需要“携带”的数据。方法中的Bundle就是一个简单的数据携带包,该Bundle对象包含了多个方法来存入数据。

putXxx(String key,Xxx data):向Bundle放入Int、Long等各种类型的数据。

putSerializable(String key,Serializable data):向Bundle中放入一个可序列化的对象。

为了取出Bundle数据携带包里的书籍,Bundle提供了如下方法:

getXxx(String key):从Bundle取出Int、Long等各种类型的数据。

getSerializable(String key,Serializable data):从Bundle取出一个可序列化的对象。

4、启动其它Activity并返回结果

前面提到startActivityForResult(Intent intent,int requestCode)方法,该方法用来启动指定Activity,而且期望获取指定Activity返回的结果。

为了获取被启动Activity返回的结果,当前Activity需要重写onActivityResult(int requestCode,int resultCode,Intent intent),其中requestCode代表请求码,而resultCode代表Activity返回的结果码,这个结果码是开发者跟据业务需要自行设定的。为了知道该方法是由哪个请求的结果所触发的,可利用resultCode请求码;为了知道返回的数据来自于哪个新的Activity,可以利用resultCode结果码。