美文网首页
显式意图与隐式意图

显式意图与隐式意图

作者: 海卓001 | 来源:发表于2019-07-15 12:01 被阅读0次

    当在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,只要这两个有一个生效就不算是隐式声明的

    相关文章

      网友评论

          本文标题:显式意图与隐式意图

          本文链接:https://www.haomeiwen.com/subject/ybzgkctx.html