您的位置:首页 > 其它

显式Intent和隐式Intent

2016-08-06 12:01 267 查看
显式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,来查看是否有匹配的内容,所以效率更低。所以具体的使用还要看具体的情况。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: