Android开发中Activity之间的通信原理

Android开发中Activity之间的通信原理

(皖西学院电子与信息工程学院六安237012)

摘要:让Android应用程序中的Activity对象之间,以及应用程序之间实现功能上的协作,必须实现Activity对象之间的通信及应用程序之间的通信功能。Android是通过Intent技术实现以上功能,主要包括实现Activity对象之间的调用,数据的传递,数据的返回等功能。

关键词:ActivityIntent

1引言

在一个AndroidAPP中,可以有很多Activity对象,AndroidAPP通过这些Activity对象实现其功能。那么,在同一个AndroidAPP中或不同的AndroidAPP中,如何实现下列问题:

●通过一个Activity启动其他Activity?

●Activity之间如何传送数据?

●Activity之间如何返回数据?

上述三个问题是本文主要阐述的内容。

2主要类对象

2.1Activity对象

由Activity类的子类创建的对象称为Activity对象。Activity对象是AndroidAPP程序结构的主要组成部分。一个Android应用程序可以包含一个或多个Activity对象,但必须有一个Activity对象为主要的Activity对象,主要的Activity对象是Android应用程序运行的入口。Android应用程序中的一个Activity对象可以请求加载它包含的其他的Activity对象。需要在应用程序的配置文件中注册每个Activity对象,即配置一个<activity>标记,如此应用程序才可以使用这个Activity对象。

2.2Intent对象

Intent对象主要作用是封装意图和数据,程序寻找能够完成Intent对象封装的意图的Activity对象。如果只找到一个这样的Activty对象,就激活这个Activity对象;如果找到多个这样的Activity对象,就给出一个选择列表,让用户选择其中一个Activity对象,并激活所选择的Activity对象[1]。

3Activity之间的调用

实现Activity之间的调用,首先,创建Intent对象,构造方法Intent(Stringaction),参数action为动作类型。例如:Intentintent=newIntent(Intent.ACTION_DIAL);

其次,调用Activity的startActivity(Intentintent)方法,参数intent封装了意图和数据,程序将根据其意图找到所有的能实现该意图的Activity对象。

然后,配置配置文件,在配置文件AndroidManifest.xml中配置Activity的动作与范畴,例如,在配置文件中,注册的SubActivity对象配置的动作为android:name="android.intent.action.MAIN,配置的范畴为android:name="android.intent.category.LAUNCHER,android.intent.category.DEFAULT。

4Activity之间的数据传递和返回

Intent对象的封装的数据不是寻找Activity的条件,是传递给所找到的Activity对象的数据,被找到的Activity对象可以根据需要决定是否接收这些数据。

4.1Intent封装数据方式一

Intent对象intent使用putExtra方法添加附加的数据,并为这个附加数据指定一个String类型的检索关键字。例如,intent.putExtra("number1",125.12);被启动的Activity可以根据需要决定是否接收这些数据,获取方法是:

首先,得到启动当前Activity对象的Intent对象,Intentintent=getIntent();

其次,intent调用诸如getXXXExtra(关键字)的方法,通过关键字key得到想要的数据,例如,doublenumber1=intent.getDoubleExtra(“number1”,1.0);如果获取不到,就用默认值1.0。

4.2Intent封装数据方式二

Intent还可以使用Bundle类封装数据,具体使用步骤如下:

1)创建一个Boundle对象Bundlebundle=newBundle();bundle对象调用诸如putXXX(关键字key,数据data)的方法将数据data放入bundle对象中,并为该数据指定一个String类型的检索关键字。例如,bundle.putDouble("number1",10.01);

2)intent对象使用putExtras(Bundleextras)方法将bundle对象放入当前intent对象中,如,intent.putExtras(bundle);取出数据被找到的Activity对象可以根据需要决定是否接收这些数据,取值方法是首先得到启动当前Activity的Intent对象:Intentintent=getIntent();

3)intent调用BundlegetExtras()的方法返回其中的boundle对象,如,Bundlebundle=intent.getExtras();

4)bundle对象诸如getXXX(Stringkey,…)的方法,通过关键字key得到想要的数据:doublepi=bundle.getDouble("number1",1.0);如果获取不到,就用默认值1.0。

5Activity对象返回数据

应用程序有时候可能需要被启动Activity对象返回某些数据给启动它的Activity对象。需要使用

publicvoidstartActivityForResult(Intentintent,intrequestCode)方法来启动其他的Activity对象。其中的参数requestCode应当是非负整数,否则该方法的作用等同于startActivity(Intentintent)。

如果参数requestCode取值是非负整数,表示当前Activity对象等待被启动的Activity对象返回数据给它。负责创建当前Activity对象的Activity的子类必须重写Activity类的voidonActivityResult(intrequestCode,intresultCode,Intentdata)方法,通过该方法得到当前Activity对象启动的Activity对象返回的数据。

当前Activity对象使用startActivityForResult(Intentintent,intrequestCode)方法启动另一个Activity对象后,等待调用onActivityResult()方法,此时,系统不会杀死当前的Activity对象。首先,被启动的Activity对象将要返回的数据作为附加数据存放到一个没有任何意图的Intent对象中。如,IntentreturnIntent=newIntent();returnIntent.putExtra("number1",10.1)。然后,为returnIntent指定一个int型的结果码(resultCode),setResult(100,backIntent)。最后,返回数据的Activity对象需调用finish方法结束自己的生命周期,等待返回数据的Activity对象则调用onActivityResult()方法处理返回的数据[3]。

6结束语

通过Intent对象不仅实现了程序内部或程序之间的Activity对象之间的通信,而且也实现了Activity对象之间数据的传递和返回,并通过Activity对象的动作和范畴的定义和配置,明确了程序中Activity对象功能和类别划分。

参考文献:

[1]耿祥义.Android手机程序设计实用教程[M].清华大学出版社.2013.6

[2]李宁.Android应用开发实战[M].第2版.机械工业出版社.2013

[3]DaveSmith等.Android5.0开发范例代码大全[M].清华大学出版社.2015.9

作者简介:

黄继红(1977-),男,安徽六安人,硕士,讲师,主要研究方向:软件工程

基金项目:安徽省高校优秀青年人才基金项目(2011SQRL151),安徽省六安市委托产学研项目(2013LWA005)。

标签:;  ;  ;  

Android开发中Activity之间的通信原理
下载Doc文档

猜你喜欢