gpt4 book ai didi

android - Manifest 中定义的 launchmode 是否覆盖通过 intent 标志调用的 launchmode 还是相反?

转载 作者:行者123 更新时间:2023-11-29 02:28:05 28 4
gpt4 key购买 nike

案例 I:- 当 Intent Flag 覆盖 Manifest 时

在 list 文件中,我将 Activity_B 定义为 singleTop。这些是 list 文件中的相关行:-

....
<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"/>
....

完整 list 文件如下:-

<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 标志覆盖了 list 文件中的启动模式。

(我是如何得出这个结论的:- 基本上我注意到,当我在启动多个 Activity 后转到 Activity_B 时, Activity 的数量减少了,这是单任务启动模式的典型行为)

案例 II:- 当 list 覆盖 Intent 标志时

为了确认这一点,我在 list 文件中将 Activity B 的启动模式更改为 singleInstance,并在 IntentFlag 中将启动模式保持为 singleTask。现在 list 文件的启动模式设置为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);

然而,这次没有覆盖 list 文件。

(我是如何得出这个结论的?Activity C 没有被添加到包含 Activity B 的任务中,这是 singleInstance 启动模式的典型行为。)

我试图在文档中找到这个,但那里没有提到这种行为。 谁能解释为什么这两种情况下的结果不同,发生了什么,Manifest 中定义的启动模式是否覆盖通过 intent 标志调用的启动模式,或者是否相反,或者这些启动模式有一些内部优先顺序?

(这是我在 StackOverflow 上的第一个问题,对于我可能无意犯下的任何错误,我深表歉意)

最佳答案

Can anyone explain what is happening exactly whether the launchmode defined in Manifest override the launchmode called through intent flag or is it the other way around?

在 Activity 启动期间通过 Intent 定义的标志会覆盖 Manifest 中的默认模式。

基于 documentation :

When starting an activity, you can modify the default association of an activity to its task by including flags in the intent that you deliver to startActivity().

以下是可用于修改默认行为的标志:

关于android - Manifest 中定义的 launchmode 是否覆盖通过 intent 标志调用的 launchmode 还是相反?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51075640/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com