从最近和历史记录中排除活动



实际上我对安卓自定义标签有一个直接的问题。 但是,尽管如此,我将概括我的问题。让我们假设我有ActivityAActivityB.ActivityA- 是一个外部的,因此我们从一个 意图 :

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

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

附言我需要完成ActivityA,它通过意图启动,我无法访问其代码,也无法调用finish()

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

但是,您应该能够通过覆盖ActivityB中的 BACK 按钮并让它返回到任务堆栈中位于下方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);
}

您可以使用finish()方法清除任何活动。 所以在开始另一个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

最新更新