美文网首页
Activity -flags&IntentFilter

Activity -flags&IntentFilter

作者: ae12 | 来源:发表于2018-11-09 15:46 被阅读4次

    Activity的常用的几个Flags:
    FLAG_ACTIVITY_NEW_TASK:
    作用是为Actiivty指定singleTask启动模式,和在xml中指定启动模式一致;

    FLAG_ACTIVITY_SINGLE_TOP
    为Acitivity指定singleTop 的启动模式,和xml中指定一致;
    FLAG_ACTIVITY_CLEAR_TOP:
    具有此标记位的Activity,当它启动时,所有位于它上面的Activity全部出栈。一般和FLAG_ACTIVITY_NEW_TASK配合使用;

    FLAG_ACTIVITY_EXCLUDED_FROM_RECENTS;

    IntentFilter 匹配规则:
    启动Activity有2种方式:显式调用、隐式调用;
    显式调用需明确指出被启动组件的信息包括包名、类名;隐式调用则不需要,但是需Intent 匹配目标组件的IntentFilter的所设置的过滤信息,否则无法启动目标组件。

    An Uri can be used with the implicit intent to specify data type.

    IntentFilter中的过滤信息包括:action category data

    具体详情可以看官方文档,这里说一下应用场景:
    module app依赖 第三方库module library,现要用module library 中的activity A
    启动module app中的的 activityB,此时就可以通过隐式的intentFilter来做:
    1.首先在module app的Manifest中注册 activityB

    <activity
                android:name="com.xjx.demo.home.BActivity"
                android:screenOrientation="portrait">
                <intent-filter>
                    <action android:name="com.demoBActivity.action" />
                    <category android:name="android.intent.category.DEFAULT" />
                </intent-filter>
    

    2.注册Activity完成了,现在可以在module library里的Activity A启动module app里的Activity B了。

    代码如下:

       //这里用到了隐式意图,来启动app库里面的activity
       Intent intent = new Intent();
       intent.setAction("com.demoBActivity.action");
       intent.addCategory("android.intent.category.DEFAULT");
       startActivity(intent);  
    action写我们AndroidManifest注册的action即可。
    

    相关文章

      网友评论

          本文标题:Activity -flags&IntentFilter

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