在清单文件中,我将Activity_B定义为singleTop 。 这些是清单文件中的相关行:-
....
<activity android:name=".Activity_A" android:launchMode="standard">
...
<activity android:name=".Activity_B" android:launchMode="singleTop"/>
<activity android:name=".Activity_C" android:launchMode="standard"/>
<activity android:name=".Activity_D" android:launchMode="standard"/>
....
完整清单文件如下:-
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".Activity_A" android:launchMode="standard">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".Activity_B" android:launchMode="singleTop"/>
<activity android:name=".Activity_C" android:launchMode="standard"/>
<activity android:name=".Activity_D" android:launchMode="standard"/>
</application>
现在创建了一个方法,该方法在运行时将Activity_B设置为singleTask ,该方法如下所示:-
protected void startActivity(Activity activity, Class targetActivityClass){
Intent intent=new Intent(activity,targetActivityClass);
if(targetActivityClass.equals(Activity_B.class)) {
getIntent().setFlags(Intent.FLAG_ACTIVITY_NEW_TASK| Intent.FLAG_ACTIVITY_CLEAR_TOP);
}
startActivity(intent);
}
现在,当我运行此应用程序时,我注意到Intent标志将覆盖清单文件中的启动模式。
(我如何得出这个结论:-基本上,我注意到启动多个活动后进入Activity_B时,活动数量减少了,这是“单任务”启动模式的典型行为)>
要确认这一点,我在清单文件中将Activity B的启动模式更改为singleInstance,并在IntentFlag中将启动模式保留为singleTask。 现在清单文件的启动模式设置为singleInstance
<activity android:name=".Activity_B" android:launchMode="singleInstance"/>
startActivity方法相同,即
protected void startActivity(Activity activity, Class targetActivityClass){
Intent intent=new Intent(activity,targetActivityClass);
if(targetActivityClass.equals(Activity_B.class)) {
getIntent().setFlags(Intent.FLAG_ACTIVITY_NEW_TASK| Intent.FLAG_ACTIVITY_CLEAR_TOP);
}
startActivity(intent);
}
但是,这次清单文件没有被覆盖。
(我是如何得出这个结论的?活动C未添加到包含活动B的任务中,这是singleInstance启动模式的典型行为。)
我试图在文档中找到它,但是这里没有提及这种行为。 谁能解释这两种情况下的结果为何不同,发生了什么,清单中定义的启动模式是否覆盖了通过意图标志调用的启动模式,或者是相反的方式,还是这些启动模式具有一些内部优先级顺序?
(这是我关于StackOverflow的第一个问题,对于可能无意中犯的任何错误,我深表歉意)
答案 0 :(得分:0)
任何人都可以确切解释发生的情况是否是启动模式 在清单中定义的方法会覆盖通过意图标志调用的启动模式 还是相反?
在活动开始期间通过Intent定义的标记会覆盖清单中的默认模式。
开始活动时,可以修改以下项的默认关联 通过在您的意图中包含标志来完成其任务的活动 交付给startActivity()。
以下是可用于修改默认行为的标志: