Intent 设计的目标:
- 启动四大组件
- 高层次解耦
Intent用来干嘛?
启动Activity, Service, BroadcastReceiver
传递数据
为什么要用Intent?
封装“启动意图”
提供统一编程模型
避免耦合
1.1 使用Intent可以启动的系统组件
启动方法 | ||
Activity |
startActivity(Intent intent)
startActivityForResult(Intent intent, int responseCode)
Service
ComponentName startService(Intent service)
boolean bindService(Intent service, ServiceConnection conn, int flag)
BroadcastReceiver
sendBroadcast(Intent intent)
sendBroadcast(Intent intent, String receiverPermission)
sendOrderBroadcast(Inent intent)
sendStickyBroadcast(Intent intent)
Broadcast发送完了,消息还好再等待一会
sendStickyOrderBroadcast(Intent intent….)
1.2 Intent的属性
1.2.1 Component 属性
Component属性其实就是一个ComponentName对象,用于指明要启动的组件类的包名,和类
ComponentName comp = new ComponetName(ThisActivity.this, TargetActivity.class);Intent intent = new Intent();intent.setComponent(comp);startActivity(intent);
其实我们可以用更简单的方法
Intent intent=new Intent(ThisActivity.this, TargetActivity.class);.....
1.2.2 Action、Category
代表要完成的一个抽象动作
显式意图,隐式意图
<intent-filter>节点下可以包含
0~N个<action/>元素
0~N个<category/>元素
0~1个<data />元素
系统中有名的ACTION:
ACTION_MAIN
ACTION_VIEW
ACTION_CALL直接给指定用户打电话
1.2.3 Data, Type与Intent Filter
指定了Data, 就无需再支持Type属性
Data 属性是一个Uri 的对象实例
content://com.android.contacts/contacts/1
1.2.4 Extra
长用于多个Action之间的数据交换, 是一个Bundle对象