温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Android Intent详解

发布时间:2020-04-06 17:00:21 来源:网络 阅读:637 作者:恐龙ID 栏目:移动开发

    (一)概念:Intent简单来说就是启动或切换Activity, Service或Broadcast三大组件的。Intent使应用程序代码在运行时动态绑定成为可能,大大降低了不同代码之间的耦合性。Intent最常用的方法是用来启动一个Activity。Intent封装了一系列他要执行的动作属性,常见的有Action,Data,Type, Category, Extras。

    a: Action, Action属性要完成的只是一个抽象的动作,这个动作具体由哪个组件(Activity或BroadcaseReceiver)来完成,Action这个属性本身并不管。比如:Android提供的标准Action:Intent.ACTION_VIEW,他只表示一个抽象的查看操作,但具体查看什么,启动哪个Activity他并不知道,这取决于Activity的<intent-filter../>配置,只要Activity的<intent-filter../>配置中包含了ACTION_VIEW他就有可能被启动, 可以调用Intent的setAction()方法为Intent设置Action属性的值。

    b: Data/Type, Dta属性是用于向Action属性提供操作的数据,Data属性接收一个Uri对象,一个Uri对象通常通过如下形式的字符串来表示:

content://com.android.contacts/contacts/1
tel:123

     而Uri字符串总是满足如下的格式

scheme://host:port/path

     Type属性是用于指定Data属性向Action提供的数据的格式,即指定该Data属性所指定的Uri所对应的MIME类型,这种MIME类型可以是任意自定义的MIME类型,只要符合abc/xyz格式的字符串即可。

    Data属性与Type属性的关系比较微妙,这两个属性会互相覆盖,比如:

-->如果为Intent先设置Data属性后设置Type属性,那么Data属性将会被Type属性所覆盖。
-->如果为Intent先设置Type属性后设置Data属性,那么Type属性则会被Data属性所覆盖。
-->要希望二者都同时存在,则应该调用Intent的setDataAndType()方法。

    c: Extra,Extra属性相信您应该使用过许多遍了,他用于用于在多个Action之间进行数据的交换(Activity切换时的数据传递intent.putExtra(...)),该属性值应该是一个Bundle对象,Bundle对象类似于一个Map对象可以存入多个key-value键值对。

    d: Category,  Category属性是用于向Intent提供附加信息的属性,可以是任意的字符串,如果一个Activity中同时设置了Action与Category那么,只有当二者同时满足Activity才会被响应,可通过Intent的addCategory()方法来设置。

    说明:一个Intent对象只可以有一个Action但可以设置多个Category属性,如果不指定Category属性,系统会默认初始化一个Category属性,其值为Intent.CATEGORY.DEFAULT常亮(常亮值为android.intent.category.DEFAULT组件)


    (二)显式Intent与隐式Intent。

    • 显式Intent通过指定Intent组件名称来实现的,一般使用在知道目标组件名称的前提下,指定需要转向到的Activity,明确指定了要激活的组件,一般使用在应用程序内部。

    • 隐式Intent:通过Intent Filter来实现的,它一般用在没有明确指出目标组件名称的前提下。Android系统会根据隐式意图中设置的动作(action)、类别(category)、数据(URI和数据类型)找到最合适的组件来处理这个意图。一般是用于在不同应用程序之间

    对比:显式Intent效率更高,因为系统可以直接精准的定位到需要激活的组件,缺点是耦合度高,例如:通过这种方法调用一些系统组件,很容易因为版本的更新,包名,类名,包结构的变化而导致程序崩溃;隐式Intent相对于效率较底下,因为每次意图执行的时候系统都会搜索所有的intentfilter,来查看是否有匹配的内容,所以效率更底下。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI