Android如何解析Intent Filter

匿名性质的运行时绑定使得理解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能响应相同的动作请求。

 

告别玄学调试:用STM32CubeMX和逻辑分析仪搞定DP83848的RMII与SMI接口 本文详细介绍了如何使用STM32CubeMX和逻辑分析仪调试DP83848的RMII与SMI接口,帮助开发者超越表象,直接观察底层通信波形。通过实战案例和高级调试技巧,解决常见问题如时钟偏移、信号完整性等,提升网络接口的稳定性和可靠性。 阅读详情

相关推荐

【新华三】通过路由复制实现Public与VRF路由互通

如上图所示,S6900设备里有两张表,一张是public路由表,默认所有的路由都存放在public路由表里;除此之外还创建了VRF test,因此此设备还有VRF test路由表。通过路由复制实现Public路由和VRF路由互通,默认情况下VRF里的路由单独一张路由表,默认情况下与public路由表相互隔离,两张表之间不可互访。此时的public路由表里面并没有test的路由表。public路由表与VRF路由表之间相互隔离。此时VRF test里的路由也没有其他VRF或Public里的路由,相互隔离。

五大连池的镜子 5278

android intent-filter,安卓intent-filters解析

前沿近段时间想对安卓推送有更进一步的了解,之前有做过友盟推送,极光推送的集成。然而在使用这些推送的时候,按照官方文档的步骤,很快就集成好,测试成功后,也没花太多时间去细究它里面的实现细节,比如如何通过服务维持长链接,以及又是如何通过在应用间互相拉起的。第一步自然是从manifest文件开始,首先要弄清楚的intent-filter是怎么过滤intent的。那在这篇文章里,我将对intent-fil...

weixin_39608300的博客 490

解决Docker拉取镜像报错:Get https://registry-1.docker.io/v2/: 报错

解决Docker拉取镜像报错: Get “https://registry-1.docker.io/v2/”: net/http: request canceled while waiting for connection问题描述Get "https://registry-1.docker.io/v2/"是docker官方的镜像源,下载很慢的,一般会自己指定国内映射的加速镜像源。

qq_33650333的博客 4171

Android中Intent对象与Intent Filter过滤匹配过程详解

如果对Intent不是特别了解,可以参见博文《Android中Intent概述及使用》,该文对本文要使用的action、category以及data都进行了详细介绍。本文在描述组件在manifest中注册的Intent Filter过滤器时,统一用intent-filter表示。概述我们知道,Intent是分两种的:显式Intent和隐式Intent。如果一个Intent明确指定了要启动的组件的完整

孙群 2万+

如何利用 多 张 GPU 高效运行 Ollama

通过以上步骤,我们可以确保系统尽可能地利用所有 多张GPU 来运行 Ollama。如果在配置过程中遇到问题,建议查阅 Ollama 的官方文档,确认其是否支持多 GPU 并行计算,或者对系统性能进行进一步的优化。充分利用多 GPU 的并行计算能力,可以显著提升 Ollama 的运行效率,加快模型的推理和训练速度。希望本文能帮助你顺利实现 多张 GPU 的高效利用。

weixin_44997264的博客 8031

从命名玄学看单片机江湖:STC、STM32与ESP32的型号密码与设计哲学

本文解析了STC、STM32和ESP32三大主流单片机系列的型号命名规则,揭示了其背后的设计哲学与市场策略。通过详细解读STC89C52、STM32F103C8T6等具体型号,帮助开发者理解芯片核心特性、性能等级及适用场景,为嵌入式系统选型提供实用指南。

g5h6i的博客 761

Android解析Intent Filter详细过程

当在startActivity中传入一个隐式的Intent时,决定启动哪个Activity的过程称为intent解析,intent解析的过程是为了通过一下的具体步骤找到合适的Intent Filter: (1)Android将已安装包的可用的Intent Filter放到一个列表中. (2)那些与解析Intent相关的联的动作或者类别不匹配的Intent Filter将会从列表中除去.   

一点一滴积累! 1052

MIT IDSS深度解析:跨学科融合与系统科学实践

麻省理工学院的IDSS(Institute for Data, Systems, and Society, IDSS)是一个致力于通过先进分析方法推动教育与研究的前沿机构。它将工程学、信息科学和数据科学的方法与社会科学的分析方法相结合,以应对复杂的社会挑战。

AllenLV的博客 2083

使用Intent Filter实现插件和扩展

到目前为止,你已经学会了如何显式地创建隐式Intent,但这只是故事的一半。Android允许后来的包为已有的应用程序提供新的功能,在运行时使用Intent Filter动态地填入菜单。 这为你的Activity提供了插件模型,使它们可以利用目前还未构想到的新应用程序组件的功能性,而不需要修改或重新编译你的工程。 Menu类的addIntentOptions方法...

de14141983的专栏 179

MediaPipeUnityPlugin(最新版)摇摆拳人脸识别

MediaPipeUnityPlugin(最新版)摇摆拳人脸识别

不忘初心 方得始终 2979

全新YOLOv11一文弄懂 | YOLOv11网络结构解读 、yolov11.yaml配置文件详细解读与说明、模型训练参数详细解析 | 通俗易懂!入门必看系列!

本文全面介绍了YOLOv11目标检测算法,包含网络结构解析、yaml配置文件详解及训练教程。YOLOv11通过改进的C3k2f模块、SPPF和C2PSA注意力机制等创新设计,在COCO数据集上实现了比YOLOv8更优的性能。文章详细解读了yolov11.yaml配置文件的参数设置、主干网络(backbone)和头部网络(head)结构,并提供了完整的训练代码示例和参数说明。训练部分涵盖了模型选择、参数设置及优化技巧,包括epochs、batch size、学习率等关键参数的调整建议。最后总结了YOLOv11

Ai缝合怪、助力小伙伴高效发论文 3万+

学习笔记之Android中的Intent-Filter匹配规则解析

文章目录前言intentFiler的结构ActionCategoryData设置intentFilter常用的intentFiler小结参考资料 前言 我们都知道,活动的启动方式有两种:一种是显示启动,或者很简单,指定一个活动的class就可以了;另外一种就是隐式启动,这种要指定action,category,data信息,例如我们在启动系统相机的时候。看一下代码: Intent intent =...

一只修仙的猿 894

元学习与Transformer的结合:Meta-Transformer架构解析

我们生活在一个信息爆炸的时代,每天都会产生海量的数据。在深度学习领域,如何让模型更高效地学习、更快地适应新的任务,一直是科学家们努力的方向。元学习和Transformer都是深度学习中的重要概念,它们各自有着独特的优势。本文的目的就是深入剖析将元学习和Transformer结合起来的Meta - Transformer架构,探讨它的原理、应用以及未来发展。我们会从基础概念讲起,逐步深入到架构的各个方面,让大家对Meta - Transformer有一个全面的了解。

AI智能探索者的博客 1052

Android Intent Filter原理与面试解析

Intent Filter是Android组件间通信的核心机制,通过定义Action、Category和Data三要素,实现组件能力的声明与匹配。其底层原理涉及PackageManager的组件数据库管理和IntentResolver的匹配算法,是Android系统实现隐式Intent调度的关键技术。在应用开发中,合理使用Intent Filter能实现灵活的组件调用,但需注意性能优化和安全问题。本文深入解析Intent Filter的匹配流程、系统服务交互机制以及常见面试问题,帮助开发者掌握这一Andro

weixin_28432777的博客 322

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Android Intent Filter底层原理与面试解析

Intent Filter是Android组件通信的核心机制,通过声明式匹配规则实现组件间的动态发现。其工作原理基于Action、Data和Category三个维度的匹配逻辑,其中Data匹配涉及复杂的URI结构和MIME类型处理。在系统层面,PackageManagerService通过哈希索引和延迟解析等优化手段提升匹配效率。作为Android开发高频面试点,深入理解Intent Filter的底层实现有助于解决实际开发中的组件启动失败、Intent劫持等典型问题。特别是在Android 11+的包可见

weixin_29174013的博客 345

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Android Intent Filter机制解析与面试要点

Intent Filter是Android组件通信的核心机制,作为基于声明的动态路由系统,它实现了应用间的灵活交互。其工作原理涉及Action、Data、Category和Extras四维匹配规则,系统通过PackageManagerService建立哈希映射和前缀树索引来优化匹配效率。在工程实践中,合理使用Intent Filter能实现类似微信分享的动态功能适配,但需注意性能损耗和安全风险。面试常考察的exported属性、隐式Intent匹配流程等问题,本质上都是对系统级设计trade-off的理解。

weixin_29165465的博客 304

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Android如何解析Intent Filter (转)

匿名性质的运行时绑定使得理解Android如何解析一个隐式Intent到一个特定的应用程序组件变得重要。   和你之前看到的一样,当使用startActivity时,隐式Intent解析到一个单一的Activity。如果存在多个Activity都有能力在特定的数据上执行给定的动作的话,Android会从这些中选择最好的进行启动。   决定哪个Activity来运行的过程称为Intent...

梦幻Android 123

Intent 和 Intent Filter

http://www.cnblogs.com/Android_2011/archive/2011/06/12/2078643.html Android 应用程序中有三大核心组件: Activity, Service, Broadcast Receiver 都是通过被称之为意图的消息运行。Intent messaging is a facility for late run-time bin

在线笔记 578

intent详解

Intents and Intent Filters 三种应用程序基本组件——activity, service和broadcast receiver——是使用称为intent的消息来激活的。Intent消息传递是一种组件间运行时绑定的机制. intent是Intent对象, 它包含了需要做的操作的描述, 或者, 对于广播来说, 包含了正在通知的消息内容. 对于向这三种组件发送inten

gaohongijj的专栏 1562

Android Activity和Intent机制学习笔记

对于显式Intent,Android不需要去做解析,因为目标组件已经很明确,Android需要解析的是那些隐式Intent,通过解析,将 Intent映射给可以处理此Intent的Activity、IntentReceiver或Service。         Intent解析

xiaodongvtion的专栏 498

android的Intent 和 Intent Filter

Android 应用程序中有三大核心组件: Activity, Service, Broadcast Receiver 都是通过被称之为意图的消息运行。Intent messaging is a facility for late run-time binding between components in the same or different applications. 意图本身一个 In

ownWell的专栏 810
上一篇: 一生要小心处理的50件事
下一篇: Android使用Intent Filter来响应隐式Intent
SleepInDelphi
博客等级 码龄19年 32粉丝 388原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值