Activity Intent
Activity Intent
- 什么是Intent
- 为什么要用Intent
- 如何使用Intent
什么是Intent?
在Android developer中是这样描绘Intent的:
Intent 是一个消息传递对象,您可以用来从其他应用组件请求操作。尽管 Intent 可以通过多种方式促进组件之间的通信,但其基本用例主要包括以下三个:
- 启动 Activity
- 启动服务(Service)
- 传递广播(BroadCast)
这里的消息是一种请求操作,当然消息传递不止这一种,而且消息不仅仅指请求。我们有专门的IPC(进程间通信、跨进程通信)机制。
这里就不深入了,后续会学到。
那么我们拐回来,再说一下Intent
Intent是对要执行的操作的抽象描述。它可以与Context、startActivity(Intent)一起使用,以启动安卓应用程序活动
Intent提供了一种工具,用于在不同应用程序中的代码之间执行后期运行时绑定。它最重要的用途是在启动活动时,它可以被认为是活动之间的粘合剂。它基本上是一个被动的数据结构,包含了对要执行的操作的抽象描述。
其实我们创建Intent对象的时候,可以查看他的源码,发现了对于Intent其实是实现了两个接口:Parcelable和Cloneable
第一个接口是实现序列化的接口(将对象转换为可以传输的二进制流(二进制序列)的过程,这样我们就可以通过序列化,转化为可以在网络传输或者保存到本地的流(序列),从而进行传输数据 )
第二个是实现克隆,拷贝的接口,以后学习的时候可以看看。
当然我们只是了解一下这个地方,主要是我们知道他是从序列化然后传输数据来的就可以了。
为什么要使用Intent?
这是个好问题,当然是为了通信和传递消息,但是这里没说明白,想要说清楚就要说清楚这个Intent的好处是什么。Intent是一种运行时绑定(runtime binding)机制,它能在程序运行的过程中连接两个不同的组件。通过Intent,程序可以向Android表达某种请求或者意愿,Android会根据意愿的内容选择适当的组件来响应。
所以这个Google用Intent(意图)来做了一个机制,或者说这个对象。
当然相应有两种:
显式和隐式的Intent调用
我们先不说代码,我们就搞逻辑
举一个例子:
- 我想找一个朋友打羽毛球:对于这句话来说,这就是一个隐式的Intent 为什么这么说,”我”是一个ActivityA”朋友”是另外一个未知的ActivityB。要通过”打羽毛球”这个Action去找到这个”朋友”,如果恰好我的朋友小王也想打羽毛球,那么”小王”就是这个具体的ActivityB。
- 我想和小王打羽毛球:对于这句话来说这就是一个显式的Intent。”我”是ActivityA,”小王”就是ActivityB,此时,你不需要通过Action去匹配
我们说完了为什么要使用Intent,那么我们说最后一点:如何使用Intent
如何使用Intent
显式
当然,Android权威指南第五章说的很清楚:我们想显式使用一个Intent,那么我们就直接定义一个Intent对象,如果要传数据就调用方法,这个Intent对象只要显式的申明想要去的Activity就可以了。
1 | bt.setOnClickListener(new View.OnClickListener() { |
那么如何传数据呢?
1 | intent.putExtra("data","this is data"); |
在接受方:
1 | Intent intent = getIntent(); |
我们这里还要说一个方法: startActivityForResult
我们前面一直说的是startActivity,只要调用了startActivity就能把我第一个Activity的数据传过去
而startActivityForResult是什么意思呢?
看名字就是知道,当我的数据传过去了以后,我们要收一个返回值出来
1 | startActivityForResult(intent,1);//第二个参数是请求码 |
那返回值在哪?
其实在第一个Activity中还要重写一个方法:
1 |
|
那么我们来看看第二个Activity
1 | bt.setOnClickListener(new View.OnClickListener() { |
隐式
虽然大家没有学,但是至少要提一下,大家以后可能会用到。如果想要具体的先学会使用,可以看Android developer或者在权威指南的15章
隐式其实就是不是具体指明我的Activity,而是指明我Activity的某些特性,系统去寻找满足特性的Activity,因此就能传送数据,可以这样想,就是我的Intent是可以发送到多个Activity。