Android-理解Intent

Intent可以理解是Android不同组件之间的媒介或者是信使,起着通信的作用,这样四大组件之间的耦合就不是特别多,系统可扩展性就比较强比较健壮。

我们可以设想,一个机器人由activity,service,broadcast,contentProvider构成,如果紧密拼凑在一起根本无法“奔跑”,那么现在我们有了Intent,可以理解成机器人的关节,

这样就沟通了四大组件,机器人就能奔跑啦。(包括binder机制,这种c/s结构一定程度上都是为了解耦)

还可以和浏览器的url类比,客户端和服务器之间是通过发送uri来相互通信的,这种松散的网络拓扑就会很健壮,便于共享服务器资源和网络的扩展。

 那么常见的Intent的使用是启动Activity,Service,Broadcasst.

组件名称

方法名称

Activity

startActivity()

startActivityForResult()

Service

startService()

bindService()

Broadcasts

sendBroadcast()

sendOrderedBroadcast()

sendStickyBroadcast()

Intent在寻找目标组件的时候有两种方式。一为显示调用,通过Component name来直接指定,如startActivity(intent);二位隐式调用,没有明确指定目标组件的名称,通过一定的条件过滤筛选,如setAction

那么重点来了,Intent对象是由哪些部分构成呢,由一下六个部分构成:Component name,Action,Data,Category,Extras,Flags.Intent可以任选其中的几项来构造,主要是看intent的用途而定。(Intent实质是一系列传输信息类型的集合)

1.Component name

Component name就是组件名称,是要处理这个Intent对象的组件名称。

组件名称对象由ComponentName类来封装,组件名称包含包名称和类名称,被声明在AndroidManifest.xml文件中。

组件名称通过setComponent(),setClass(),setClassName()设置,通过getComponent()获取。

需要注意的是Component name是一个可选项,如果被设置,那么Intent对象就显式指定了要转向的组件,如果没有被设置,则Intent对象需要根据其他信息进行筛选查找。

2.Data

数据类型也可以显式指定,比如setData()方法指定数据为URI,setType() 指定为MIME type,setDataAndType() 指定它既为URI又为MIME type。读取的时候URI用getData(),MIME type用getType()。

3.Category

与category相应的方法有添加addCategory()、移除removeCategory() 和获取所有category getCategories() 。

常见的Category常量有:CATEGORY_BROWSABLE ,CATEGORY_GADGET,CATEGORY_HOME,CATEGORY_LAUNCHER,CATEGORY_PROFERENCE.

Category指定的往往是一些控件。

4.Extras

实际上,数据可以被作为一个Bundle对象被使用,利用 putExtras() 和 getExtras() 方法。我们可以看出bundle实质上是hashmap,存储一些键值;然后传递这些键值的信息。

public Bundle() {
mMap = new HashMap<String, Object>();
mClassLoader = getClass().getClassLoader();
}

5.Flags

各种类型的Flag。很多是用来指定Android系统如何启动activity,还有启动了activity后如何对待它。所有这些都定义在Intent类中。

6.Action

Action是指Intent要完成的动作,是一个字符串常量。

Intent类中有很多预定义的常量,为了一些通常的动作;还有一些定义在Android API的其他地方。

也可以自己定义Action常量,自定义的常量需要加上你的应用的包名作为前缀。

Action在很大程度上决定了Intent的其他部分是如何构造的,尤其是 data 和 extras域。(就好像函数名会决定着参数值和返回值一样。)所以Action的名字应该尽可能具体,并且它们应该和Intent中的其他域紧密结合。

使用 setAction() 和 getAction()来设置和读取Action属性。

常见的Action包括:ACTION_CALL,ACTION_EDIT,ACTION_MAIN,ACTION_SYNC,ACTION_BATTERY_LOW,

ACTION_HEADSET_PLUG,ACTION_SCREEN_ON,ACTION_TIMEZONE_CHANGED.

Action指向的往往是android的系统服务相关的,如系统service,broadcast之类的系统服务。

原文地址:https://www.cnblogs.com/hxy0107/p/4552576.html