显式意图与隐式意图

2019-07-15  本文已影响0人  海卓001

当在App内需要从某个Activity跳转到其他Activity,或是启动一个指定的service,一般写法是

Intent intent = new Intent(this,SecondActivity.class);

startActivity(intent);

这就是一个显式意图,指定了目标类。


隐式意图,举个例子,App的入口Activity在Manifest中是这样配置的

<activity android:name=".MainActivity">

    <intent-filter>

        <category android:name="android.intent.category.LAUNCHER" />

        <action android:name="android.intent.action.MAIN" />

    </intent-filter>

</activity>

这样就实现了解耦,Launcher在启动App时无需知道入口是哪个类,只要发送一个Action为”android.intent.action.MAIN”的隐式意图。 

调用系统拨号界面、打开相机、相册也是同样的原理,在开启系统相册选择图片时,发起者并不知道系统中的相册App的目标类是哪个,甚至要打开的App包名都不知道,通过隐式意图,设置Action为Intent.ACTION_PICK,系统就知道你要打开相册选择图片了。

有时在微信里选择“用浏览器打开”,会跳出多个App让用户选择,这里就是有多个Intent-Filter匹配上了Action和Category。

总结:从源码中的逻辑来看的话,判断一个intent是不是显式声明的点就是component和package,只要这两个有一个生效就不算是隐式声明的

上一篇 下一篇

猜你喜欢

热点阅读