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即可。
网友评论