启动Activity时如何忽略“SingleTask”的launcheMode?

Posted

技术标签:

【中文标题】启动Activity时如何忽略“SingleTask”的launcheMode?【英文标题】:How to ignore the launcheMode of "SingleTask" when starting an Activity? 【发布时间】:2018-02-27 16:30:43 【问题描述】:

B 的启动模式为“SingleTask”的三个 Activity。我想知道如何在使用 C 时启动新 B 而不是重新启动旧 B?

【问题讨论】:

【参考方案1】:

不幸的是,如果清单中的 Activity B 设置为使用android:launchMode="singleTask",则(据我所知)无法覆盖它。

但是,当您想要singleTask 行为时,您可以从清单中删除此属性并使用类似这样的代码:

Intent intent = new Intent(this, ActivityB.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

最终结果是当你想要它时你得到singleTask 行为,而当你不想要它时你得不到它。你只需要改变策略。

【讨论】:

【参考方案2】:

在活动的onBack press方法中使用以下代码

    @Override
    public void onBackPressed() 
    Intent BackpressedIntent = new Intent();
    BackpressedIntent .setClass(getApplicationContext(),B.class);
    BackpressedIntent .setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(BackpressedIntent );
    finish();

【讨论】:

以上是关于启动Activity时如何忽略“SingleTask”的launcheMode?的主要内容,如果未能解决你的问题,请参考以下文章

Android测试随笔获得App的包名和启动Activity

如何从 Fragment 启动 Activity?

如何在特定坐标中启动Activity

Activity的启动模式

flowable工作流分支汇聚

[Android Studio]如何从Fragment中嵌套的Recycleview启动一个Activity?