当您有多个入口点活动时清除活动堆栈?

时间:2013-05-13 20:18:16

标签: android

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

如果某个应用只有一个启动活动,我们可以使用:

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 个答案:

答案 0 :(得分:0)

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

找到根活动的名称
  1. 调用getTaskId()获取任务ID。
  2. 获取一个ActivityManager对象并调用getRunningTasks以获取正在运行的任务列表(查看文档中的警告,我不明白)
  3. 当列表中的任务与上面的id匹配时,您可以使用字段baseActivity获取根目录中的活动