Intent简介
Intent是一种消息传递机制。
通过Intent,你的程序可以向Android表达某种请求或者意愿,Android会根据意愿的内容选择适当的组件来完成请求。
Android的三个基本组件——Activity,Service和Broadcast Receiver——都是通过Intent机制激活的。
1.1 要激活一个新的Activity,或者让一个现有的Activity做新的操作,可以通过调用Context.startActivity()或者Activity.startActivityForResult()方法。
1.2 要启动一个新的Service,或者向一个已有的Service传递新的指令,调用Context.startService()方法或者调用Context.bindService()方法将调用此方法的上下文对象与Service绑定。
1.3 Context.sendBroadcast()、Context.sendOrderBroadcast()、Context.sendStickBroadcast()这三个方法可以发送Broadcast Intent。发送之后,所有已注册的并且拥有与之相匹配IntentFilter的BroadcastReceiver就会被激活。
Intent描述的基本内容
- Intent对象抽象地描述了要执行的操作,其描述的基本内容可以分为:
组件名称
Action
Action描述Intent所触发动作名字的字符串。系统对常见的Activity和Broadcast进行了定义。例如:ACTION_CALL、ACTION_TIME_TICK等
Data
Data描述Intent要操作的数据URI和数据类型。例如对于ACTION_CALL,对应的数据可以是tel://格式的电话号码URI。
Category
Category是对被请求组件的额外描述信息。
Extra
Flag
解析Intent
显式Intent和隐式Intent
显式Intent明确指出了目标组件的名称,相反没有给出目标组件名称的Intent都为隐式Intent。
在Android系统中,使用IntentFilter来找寻与隐式Intent相关的对象。
显式Intent方便,但是对于开发者而言,有的时候并不能明确目标组件的名称,所以必须通过隐式Intent来查找,而对于内部组件来说,显式Intent要更为方便。
隐式Intent的匹配
实现过程:
Android将Intent的请求内容和IntentFilter的过滤器进行比较,IntentFilter中包含系统中所有可能的待选组件。
如果IntentFilter中某一组件匹配隐式Intent请求内容,那么Android就该组件作为目标组件。
Android只选用Action、Data和Category作为参考因素,Extra和Flag并不起作用
PendingIntent
PendingIntent 可以看作是对intent的包装,通常通过getActivity,getBroadcast ,getService来得到 pendingintent的实例,当前activity并不能马上启动它所包含的intent,而是在外部执行 pendingintent时,调用intent的。
PendingIntent可以看作是对Intent的包装。PendingIntent主要持有的信息是它所包装的Intent和当前Application的Context。正由于PendingIntent中保存有当前Application的Context,使它赋予带他程序一种执行的Intent的能力,就算在执行时当前Application已经不存在了,也能通过存在PendingIntent里的Context照样执行Intent。
作者:张俊强
原文链接点击这里