在清单文件中,我将 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"/>
....
Run Code Online (Sandbox Code Playgroud)
完整的清单文件如下:-
<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>
Run Code Online (Sandbox Code Playgroud)
现在创建了一个方法,该方法在运行时将 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);
}
Run Code Online (Sandbox Code Playgroud)
现在,当我运行这个应用程序时,我注意到 Intent 标志覆盖了清单文件中的启动模式。
(我是如何得出这个结论的:-基本上我注意到,当我启动多个活动后转到 Activity_B …