从最近和历史中排除 Activity

Exclude Activity from recents and history

实际上,我对 android 自定义标签有直接的疑问。 但尽管如此,我还是会概括我的问题。假设我有 ActivityAActivityBActivityA - 是一个外部的,所以我们从 Intent 启动它:

Intent intent = customTabsIntent.intent;
        intent.setData(requestUri);
        intent.putExtra(CustomTabsIntent.EXTRA_TITLE_VISIBILITY_STATE, CustomTabsIntent.NO_TITLE);
        mContext.startActivity(intent);

从这里我们看到 ActivityA - 实际上是一个自定义选项卡 activity。当事情完成后,我启动 ActivityB。我想要 ActivityA 从任务历史记录中消失,我可以通过将标志 Intent.FLAG_ACTIVITY_NO_HISTORY 应用到我的意图来实现这一点。但是这种方法会引起问题,因为当用户切换到最近使用的应用程序或转到其他应用程序时 - ActivityA 会永远消失。当然 - 这就是标记无历史记录的方式。但我想要一个不同的流程,我希望 ActivityA 仅在 ActivityB 启动时消失。有什么想法可以实现吗?

P.S。我需要完成 ActivityA,它是通过 Intent 启动的,我无法访问它的代码,也无法调用 finish().

您可以使用finish()方法清除任何activity。所以在开始另一个 activity 之前完成那个。

 Intent intent = customTabsIntent.intent;
            intent.setData(requestUri);
            intent.putExtra(CustomTabsIntent.EXTRA_TITLE_VISIBILITY_STATE, CustomTabsIntent.NO_TITLE);
            mContext.startActivity(intent);
        finish();     //add this to clear that activity

我不认为你可以通过使用 NO_HISTORY 标志来做到这一点,因为 ActivityA 正在启动并且你无法控制它。

但是,您应该能够实现您的目标(无法从 ActivityB 返回到 ActivityA,方法是重写 ActivityB 中的返回按钮并让它返回到任务堆栈中 ActivityA 下面的任何内容。

假设 ActivityCActivityA 的开头,您可以在 ActivityB:

中执行类似的操作
@Override
public void onBackPressed() {
    // Direct user back to ActivityC
    Intent intent = new Intent(this, ActivityC.class);
    // Add flags to ensure that we reuse the existing instance of
    //  ActivityC and that we clear any other activities above ActivityC
    //  from the stack.
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
                    Intent.FLAG_ACTIVITY_SINGLE_TOP);
    startActivity(intent);
}