当前位置: 移动技术网 > IT编程>移动开发>Android > Android Activity之间相互调用与传递参数的原理与用法分析

Android Activity之间相互调用与传递参数的原理与用法分析

2019年07月24日  | 移动技术网IT编程  | 我要评论

焦利 内幕,正中水镇,巴印连续5天交火

本文实例讲述了android activity之间的相互调用与传递参数。分享给大家供大家参考,具体如下:

activity之间是如何调用的

在javaweb程序中,jsp与jsp之间的调用是通过重定向完成的,而在android中,activity与activity之间的切换是通过intent来完成的。

所谓intent,它是android中非常重要的内置组件,他可以理解为“我要干一件什么事情”。在android中有3大组件:activity,service、broadcast,他们之间的通信都是通过intent来完成的,所以intent其实就是告诉他们之间的每一个人,要干什么事情。

创建自己的activity

高焕堂先生的android讲义中有如下一段内容:

android的4种嫡系组件(即activity、service、intentreceiver和contentprovider)之间如何互相沟通呢?这4种嫡系组件都是由android启动的,并不是组件之间透过直接呼叫而启动的。

这段文字总结的十分精辟,它告诉了读者(以activity为例)activity是android自启动的,这样的话,编程人员必须要明确告诉android“我的应用程序里面有哪些是你要给我启动的”,而如何告诉android这些信息呢,android为我们提供了一个androidmanifest.xml文件。在这个文件中,就可以告诉android这些内容。这也是为什么我们在建立了自己的activity、contentprovider等之后,必须要在配置文件中进行配置的原因。

以下代码是在自己定义的一个名为secondactivity的activity,其配置代码如下:

<activity android:name=".secondactivity"
     android:label="secondactivity">
</activity>

在android:name一项中中的“.”代表在当前配置文件的默认包名之下。

activity之间的切换

从一个activity调用另一个activity,十分简单,只需要创建一个intent,并且告诉intent我从哪来,要到哪去,然后执行这个intent,就可以了。示例代码如下:

intent i = new intent(testactivity.this,secondactivity.class);
startactivity(i);

当然,这样只能够做到activity之间的切换,如果想在切换的同时,由旧的activity向新的activity传递一些参数,那么就要在startactivity()方法之前,为intent添加参数,通过putextra(string,xxx)这组方法,就可实现。

putextra(string,xxx)方法类似于map,键都是string型,值有不公类型,该方法被重载,具体可参考api,示例代码如下:

intent i = new intent(testactivity.this,secondactivity.class);
i.putextra("uname", "legend");
i.putextra("uage", (short)18);
startactivity (i);

获取intent传递的值

旧的activity将值传递给了新的activity,那么在新的activity中,要通过getintent()方法,方可接收传递过来的intent。得到intent后通过getxxxextra()方法,可以取得不同类型的值。如下所示:

intent i = getintent();
string uname = i.getstringextra("uname");
short uage = i.getshortextra("uage", (short) 0);

旧activity得到新activity结束后传递的intent

在开发中,有这种情况,比如说我们的一个activity要调用一个新的activity,让后用户对新的activity操作完成后,关闭新的activity,这时需要将新的activity中的一些值传递给旧的activity。这就中情况不用自己处理,android已经为我们编写了一个onactivityresult(int requestcode, int resultcode, intent data)方法,专门处理这种情况。

首先,在旧的acitvity中的启动intent方法不能再使用之前的startactivity,而要给用startactivityforresult(i, requestcode1 );方法,该方法第一个参数为要传递的intent,第二个参数为请求码,该请求码其实就是一个整型变量,用于指明是那个方法、或者说是那个控件启动了该intent,其最主要的目的是在onactivityresult(int requestcode, int resultcode, intent data)方法中,编程使用。读者这里可以不用深究,看到例子后,便会明白。该处代码如下:

intent i = new intent(testactivity.this,secondactivity.class);
i.putextra("uname", "legend");
i.putextra("uage", (short)18);
startactivityforresult(i, requestcode1 );

其次,在新的activity中要接受刚刚传递的intent,接受方法如上所述,这里不再赘述。在新的acitvity处理完成后,需要同过setresult(intent i)方法来设置新的activity结束后需要传递会旧的activity的intent。之后调用新的activity的finish()方法,结束新的acitvity就可以了。代码如下:

intent resultintent = new intent();
resultintent.putextra("uname", "legend2");
resultintent.putextra("uage", (short)22);
setresult(resultcode1, resultintent);
secondactivity.this.finish();

最后,在旧的activity中重写onactivityresult(int requestcode, int resultcode, intent data)方法,该方法的三个参数,这里就不在赘述了,相信读者一看即明白,这里给出代码如下:

if(requestcode == requestcode1){
     system.out.println("requestcode equal");
     if(resultcode == secondactivity.resultcode1){
         system.out.println("resultcode equal");
         string uname = data.getstringextra("uname");
         short uage = data.getshortextra("uage", (short)0);
         tv.settext("uname:"+uname+" uage:"+uage);
     }
}

参考程序

activitytest

补充:

在intent中,可以携带object类型的信息,读者查阅api后,可能会放先,putextra()方法中,并没有实现object的,但是重载了如下的方法:putextra(string name, serializable value),只要将对象实现了serializable接口,就可以添加进intent了。

对象序列化及反序列化

一个对象产生后,实际上是在内存中开辟了一个存储空间,方便存储信息。

对象的序列化,就是一个对象变成二进制数据流的一种方法,通过对象的序列化可以方便的实现对象的传输与存储。

如果一个类的对象想要被序列化,必须实现serializable接口,但是该接口中无方法,它属于一个标示接口,表示具备了某种能力。

序列化和反序列化,可以理解为:

序列化:程序àobjectoutputstreamà序列化对象
反序列化:序列化对象àobjectinputstreamà程序

在序列化的时候,可以通过serialversionuid来标识序列化版本。

值得注意的是,序列化存储的只是对象的成员变量。

objectinputstream中的readobject()方法可读取对象。
objectoutputstream中的writeobject()方法可写入对象。

更多关于android相关内容感兴趣的读者可查看本站专题:《android编程之activity操作技巧总结》、《android视图view技巧总结》、《android操作sqlite数据库技巧总结》、《android操作json格式数据技巧总结》、《android数据库操作技巧总结》、《android文件操作技巧汇总》、《android编程开发之sd卡操作方法汇总》、《android开发入门与进阶教程》、《android资源操作技巧汇总》及《android控件用法总结

希望本文所述对大家android程序设计有所帮助。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网