从最近和历史中排除 Activity
Exclude Activity from recents and history
实际上,我对 android 自定义标签有直接的疑问。
但尽管如此,我还是会概括我的问题。假设我有 ActivityA
和 ActivityB
。 ActivityA
- 是一个外部的,所以我们从 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
下面的任何内容。
假设 ActivityC
是 ActivityA
的开头,您可以在 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);
}
实际上,我对 android 自定义标签有直接的疑问。
但尽管如此,我还是会概括我的问题。假设我有 ActivityA
和 ActivityB
。 ActivityA
- 是一个外部的,所以我们从 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
下面的任何内容。
假设 ActivityC
是 ActivityA
的开头,您可以在 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);
}