Android意图与过滤器详解:激活组件的关键机制

需积分: 20 3 下载量 25 浏览量 更新于2024-09-20 收藏 71KB DOC 举报
"Android意图和意图过滤器" Android中的意图(Intent)和意图过滤器(Intent Filter)是实现组件间通信的关键机制。意图是一种被动的数据结构,用于封装要执行的操作信息,可以用来启动活动、启动或与服务交互,以及发送广播消息。而意图过滤器则用于定义一个组件能够响应的意图类型,从而实现安全和动态的消息分发。 1. **意图对象Intent Objects** - **创建意图**: Intent可以通过构造函数创建,用于指定操作类型(ACTION)、数据URI、类别(CATEGORY)等信息。例如,`new Intent(context, TargetClass.class)`用于启动特定的Activity,`Intent.ACTION_VIEW`用于打开数据。 - **附加数据**: 使用`putExtra()`方法添加额外的数据,如键值对,这些数据可以在接收方组件中通过`getExtra()`获取。 - **显式意图**: 直接指定目标组件,通常用于在同一应用内组件间的通信。 - **隐式意图**: 不指定具体目标,而是根据意图过滤器匹配合适的组件,常用于跨应用通信和广播事件。 2. **意图解析Intent Resolution** - **隐式意图解析**: 当意图没有明确的目标组件时,系统会遍历AndroidManifest.xml中声明的意图过滤器,寻找与意图匹配的组件。匹配规则包括操作、数据类型、类别等。 - **优先级与唯一匹配**: 如果有多个组件匹配,系统会选择优先级最高的(如设置为`android:priority`),若无优先级或优先级相同,则抛出异常。若需要唯一匹配,可以设置`android:exported="false"`来限制外部访问。 3. **过滤器与安全Filters and security** - **意图过滤器Intent Filters**: 在AndroidManifest.xml中定义,用于声明组件能响应的意图类型。例如,`<intent-filter>`元素可以包含`<action>`, `<category>`, `<data>`标签来描述意图特征。 - **安全性考虑**: 使用意图过滤器允许外部组件调用,可能导致安全问题。因此,应谨慎设计过滤器,避免暴露敏感功能。对于需要保密或控制访问的组件,可以不设置过滤器或限制外部访问。 4. **服务启动与绑定Service Start and Bind** - **启动服务**: `Context.startService()`用于启动服务执行一次性任务,服务会在后台持续运行直到`stopSelf()`或`stopService()`。 - **绑定服务**: `Context.bindService()`用于与服务建立连接,进行双向通信。服务会在所有连接断开后自动停止。 5. **广播Broadcasts** - **发送广播**: `sendBroadcast()`, `sendOrderedBroadcast()`, `sendStickyBroadcast()`用于发送广播意图,系统会将广播发送给所有注册了相应过滤器的接收者。 - **有序广播**: `sendOrderedBroadcast()`允许接收者按顺序处理广播,可以拦截并修改广播数据。 - **粘性广播**: `sendStickyBroadcast()`发送的广播会在发送后继续存在,直到被清除。 意图和意图过滤器构成了Android组件间通信的核心机制,它们使得组件之间的交互变得灵活且安全。正确理解和使用意图及过滤器是开发高效、健壮Android应用的基础。