显式Intent和隐式Intent

显式Intent: 通过指定Intent组件名称来实现的,它一般用在知道目标组件名称的前提下。显式Intent明确指定了要激活的组件是哪个组件,一般用在同一个应用程序内部来实现功能。
例如:

startActivity(new Intent(A.this , B.class));

隐式Intent: 隐式Intent是在显式Intent上的扩展。显式Intent虽然方便,但是只能用在同一个程序的内部,不能通过App1来调用App2中的Activity。如果App2的一个Activity使用了隐式Intent,则可以通过App1来启动App2的这个Activity。

具体操作如下:

首先在App2中的AndroidManifest中对相应的activity进行配置

<activity android:name=".App2Activity">
    <intent-filter>
        <category android:name="android.intent.category.DEFAULT"/>   <!--Android系统中默认的执行方式,按照普通Activity的执行方式执行-->

        <action android:name="package-name.intent.action.class-name"/>   
    </intent-filter>
</activity>

然后在App1中启动App2中使用了隐式Intent的Activity

startActivity(new Intent("package-name.intent.action.class-name"));

注意:如果一个Activity使用了隐式Intent,但是又不希望这个Activity被其他应用程序启动,这时在AndroidManifest中修改这个Activity的属性 : android:exported=”false” ,默认为true(允许导出)

<activity android:name=".App2Activity"  android:exported="false" >
    <intent-filter>
        <category android:name="android.intent.category.DEFAULT"/>  
        <action android:name="package-name.intent.action.class-name"/>
    </intent-filter>
</activity>

使用环境:
显式意图效率高,系统直接精确定位要启用的组件,但耦合度也高,如果通过这种方式调用一些系统组件的话,容易因为版本更新,类名、包名、包结构变化等原因导致程序崩溃。

而隐式意图能够降低程序的耦合度,但由于每次意图执行的时候,系统都会搜索所有可用的intentfilter,来查看是否有匹配的内容,所以效率更低。所以具体的使用还要看具体的情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AidenWU

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值