Activity、Service 和 Broadcast Receiver 这些核心组件之间通过消息激活,这个消息就是
Intent。
Intent 消息可用于当前运行时同应用内部的组件之间或者不同应用的组件之间通信。Intent 自身,
即一个 Intent 对象,包含说明一个执行操作的抽象数据结构,传递给执行操作的组件,或者,常见于
broadcast 的情况,该数据结构用于描述正在执行或者已经发生的事情。
针对组件类型不同,发送 Intent 有不同的机制:
针对 Activity,Context.startActivity()方法传递 Intent,启动一个新的 Activity,或者
Activity.startActivityForResult()方法启动新的 Activity 做完事情后返回到本 Activity 来;
针对 Service,Context.startService()方法,用于创建一个 Service 或者传递给已经运行
Service 一个指令,于此类似,Context.bindService()建立当前组件和 Service 之间的连接,
可选的,如果该 Service 未运行,可以创建新的实例;
针对 Broadcast Receiver,可通过:
Context.sendBroadcast()、Context.sendOrderedBroadcast()或者
Context.sendStickyBroadcast()方法发送 Intent 给所有感兴趣的 broadcast receiver。
在以上各种情况下,Android 系统找到适合响应该 Intent 的 activity、service 或者 broadcast
service 集合。不会出现重叠现象,即,broadcast intent 只会发送给 broadcast receiver,而不会发
送给 Activity 或者 Service。
Intent 对象
Intent 对象可绑定一组信息:
接收 intent 的组件需要的信息,比如需要调用系统照相机 Activity,要告知它照片存放的路径;
Android 系统需要的信息,比如那个种类的组件可以处理这个 Intent,在比如,告知如何启动
Activity(比如要求它在哪个 task 中)。
Intent 对象主要包含以下内容:
componnet name,组件名称,可处理这个 Intent 的组件名称。组件名称是可选的,如果填
写,Intent 对象会发送给指定组件名称的组件,否则,也可以通过其他 Intent 信息定位到适合
的组件。组件名称是个 ComponentName 类型的对象,该对象又包括:
目标组件完整的类名,比如:com.example.project.app.FreneticActivity;
在 manifest 文件中设置的包名,组件的包名和 manifest 中定义的包名可以不匹配。
action,命名动作的字符串,用于执行动作,或者,在广播的情况下,表示发生的或者要报告
的动作。Intent 类定义了一组 action 常量,见 API 的 Intent.ACTION_*。这些是 Intent 类预制
的一些通用 action,还有一些 action 定义在 android 其他 API 中。用户可以定义自己的 action
字符串常量,用于激活自己的应用组件。这需要把应用的包名作为该字串的前缀,比如:
评论0