匿名性质的运行时绑定使得理解Android如何解析一个隐式Intent到一个特定的应用程序组件变得重要。
和你之前看到的一样,当使用startActivity时,隐式Intent解析到一个单一的Activity。如果存在多个Activity都有能力在特定的数据上执行给定的动作的话,Android会从这些中选择最好的进行启动。
决定哪个Activity来运行的过程称为Intent解析。Intent解析的目的是通过下面的过程找到可能匹配得最好的Intent Filter:
1. Android把安装的包中可获得的Intent Filter放到一个列表中。
2. 动作和与正在解析的Intent的种类不关联的Intent Filter会从列表中删除。
2.1. 动作匹配指Intent Filter包含特定的动作或没有指定的动作。一个Intent Filter有一个或多个定义的动作,如果没有任何一个能与Intent指定的动作匹配的话,这个Intent Filter在算作是动作匹配检查失败。
2.2. 种类匹配更为严格。Intent Filter必须包含所有在解析的Intent中定义的种类。一个没有特定种类的Intent Filter只能与没有种类的Intent匹配。
3. 最后,Intent的数据URI中的部分会与Intent Filter中的data标签比较。如果Intent Filter定义scheme,host/authority,path或mimetype,这些值都会与Intent的URI比较。任何不匹配都会导致Intent Filter从列表中删除。
没有指定data值的Intent Filter会和所有的Intent数据匹配。
3.1. mimetype是正在匹配的数据的数据类型。当匹配数据类型时,你可以使用通配符来匹配子类型(例如,earthquakes/*)。如果Intent Filter指定一个数据类型,它必须与Intent匹配;没有指定数据的话全部匹配。
3.2. scheme是URI部分的协议——例如,http:,mailto:,tel:。
3.3. host-name或“data authority”是介于URI中scheme和path之间的部分(例如,www.google.com)。匹配主机名时,Intent Filter的scheme也必须通过匹配。
3.4. 数据path是紧接在“data authority”的后面(例如,/ig)。path只在scheme和host-name部分都匹配的情况下才匹配。
4. 如果这个过程中多于一个组件解析出来的话,它们会以优先度来排序,可以在Intent Filter的节点里添加一个可选的标签。最高等级的组件会返回。
Android本地的应用程序组件和第三方应用程序一样,都是Intent解析过程中的一部分。它们没有更高的优先度,可以被新的Activity完全的代替,这些新的Activity宣告自己的Intent Filter能响应相同的动作请求。
分享到:
相关推荐
在Android应用开发中,Intent Filter是一个至关重要的概念,它用于定义一个组件(如Activity或BroadcastReceiver)能够响应的Intent类型。Intent Filter就像一个过滤器,筛选出应用可以处理的特定操作,使得系统能够...
在Android应用开发中,Intent Filter是一种机制,用于让系统知道哪些组件(如Activity、Service等)能够处理特定类型的Intent。...因此,熟练掌握Intent Filter的解析方法是每个Android开发者必备的技能。
组件通过声明Intent过滤器(Intent Filter)来表明它们可以处理哪些Intent。过滤器包含动作、数据URI、类别等元素,系统会对比Intent和过滤器来决定Intent应由哪个组件处理。 9. **Intent的生命周期** 在Activity...
在Android应用开发中,Intent是连接应用程序组件之间通信的关键机制。Intent-filter的配置对于正确地启动和接收...在Android系统中,Intent-filter是组件间通信的关键组成部分,它决定了哪些组件能响应用户的特定操作。
在Android开发中,Intent是一种非常重要的组件间通信机制。它被用来启动活动(Activity)、服务(Service)或者传递数据。本示例将深入探讨Intent的基本用法和常见应用场景。 首先,Intent分为显式Intent和隐式...
Android Intent和Intent_Filter详解 Android Intent是 Android 组件间通信的载体,它们之间的通信是通过 Intent 对象在不断传递实现的。Android 的三大核心组件 Activity、Service 和 BroadcastReceiver 都是通过 ...
Intent Filter是Intent系统的一部分,允许Android系统知道一个组件(如Activity或BroadcastReceiver)能响应什么样的Intent。在这里,我们将深入探讨Android Intent过滤器的概念、工作原理以及如何在实际应用中设置...
在Android开发中,Intent是一个非常重要的概念,它用于在组件之间传递消息,是Android系统启动服务、启动或跳转Activity的主要手段。本篇文章将详细解释Intent的基本使用以及如何通过Intent实现在两个Activities之间...
#### 三、Intent的解析与匹配 应用程序组件可以通过声明一个或多个**IntentFilter**来告诉Android它们能够响应哪些隐式的Intent请求。每个Intent Filter都描述了组件可以响应的Intent请求的能力,即组件希望接收的...
Intent Filter可以声明多个category,如`android.intent.category.DEFAULT`、`android.intent.category.BROWSABLE`等。Intent可以通过`intent.addCategory("android.intent.category.DEFAULT")`添加category。一个...
总结,Intent 是 Android 应用组件间通信的核心,Intent Filter 则使得组件可以通过声明自己的能力来接收未明确指定目标的 Intent。理解并熟练掌握 Intent 和 Intent Filter 的使用,对于构建高效、灵活的 Android ...
本资源包“Android应用源码之Intent_Intent.zip”应该包含了关于Intent使用的一些示例代码和解析,帮助开发者深入理解Intent的工作原理。 1. **Intent的类型** Intent主要有两种类型:显式Intent和隐式Intent。...
本篇文章将详细解析Intent的用法。 首先,Intent分为显式Intent和隐式Intent两种类型。显式Intent明确指定要启动的目标组件,通过组件的全限定类名(包名+类名)来指定。而隐式Intent则是不指定具体组件,而是通过...