如何销毁除最新的 3 个以外的所有活动?

how to destroy all the activites except the latest 3?

我有 A->B->C->D 这样的活动。如果我的堆栈中有 4 个活动,我该如何关闭 A activity?稍后当我打开 activity E 时,我也希望 B 也关闭,所以我只想拥有 C->D->E。

开始时activity使用

  startActivityForResult(intent,code);//different code for all activity

并致电

  finishActivity(code);//which activity do you want to close?

您可以拨打:

finish();

之后:

startActivity(intent);

在您要关闭的每个 activity 中,当您打开另一个 activity 时。

没有直接 方法来管理堆栈中的活动数。到目前为止,我知道堆栈与可用内存一样大。

还要考虑 LaunchMode 以及 Activity 是否在同一个任务中。

因此,您可以实施自己的 Activity 管理器来完成不需要的活动。

以下是我对解决方案的简要看法:

  1. 创建一个模型来存储 activity,它在堆栈中的索引,日期 ..i.e. ActivityItem
  2. 在您的自定义应用程序中创建一个 ActivityItem 的空列表。为避免内存泄漏,请使用 WeakReference。创建 public setter adActivity 以添加和管理活动
  3. 更好的方法来创建 activity 基础 class 并将其作为超类重用,无论您想要管理 运行 活动的数量。而不是为每个不同的 activity.
  4. 重复相同的实现
  5. OnCreate 在你的基地 Activity 调用 adActivity 并传递电流 activity.
  6. adActivity 作业首先是清除已销毁活动的列表。谢谢WeakReference。然后手动终止列表中最后 3 个项目之前的旧活动。它看起来并不容易.. 例如:SingleInstance 和轮换将使实现这一目标变得具有挑战性:-)

就是这样。

祝你好运,'。