0

我有一个具有多个入口点活动的应用程序。我希望能够以编程方式清除我的活动堆栈。想象一个需要用户身份验证的应用程序,并且用户想要远程使他们的会话无效(例如,被盗的设备)。

在应用程序只有一个启动活动的情况下,我们可以使用:

Intent intent = new Intent(context, LoginActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

回到根活动。但是我的应用程序可能是从不同的入口点启动的,因此堆栈的根可能有不同的活动类。

一些选项:

  1. 在我可以从任何地方调用的基本活动类中注册一个广播接收器。在处理程序中,只需调用 finish(),展开可能存在的任何堆栈。
  2. 使用不受欢迎的 System.exit()。
  3. 在上面的示例中,除了其他两个标志外,还使用 ​​Intent.FLAG_ACTIVITY_CLEAR_TASK(但这仅在 api 11 及更高版本中可用...)

谢谢

4

1 回答 1

0

您可以在任务堆栈的根目录检查活动的名称,然后使用 FLAG_ACTIVITY_CLEAR_TOP 启动该活动。如果此根活动不是您想要的活动,则在 onCreate 中启动您想要的活动并调用 finish()。
您可以通过以下方式找到根活动的名称

  1. 调用 getTaskId() 获取任务id。
  2. 获取一个ActivityManager对象,调用getRunningTasks获取正在运行的任务列表(查看文档中的warning,没看清楚)
  3. 当列表中的任务与上面的 id 匹配时,您可以使用字段 baseActivity 在根中获取活动
于 2013-05-14T18:28:31.253 回答