2013-05-13 70 views
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及更高版本...)

感谢

+0

是否所有的活动都在同一个任务中? – 2013-05-14 02:09:43

+0

是的,都在同一个任务。 – user291701 2013-05-14 16:05:32

回答

0

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

  1. 调用getTaskId()找到根活动的名称来获得任务ID。
  2. 获得一个ActivityManager对象,并调用getRunningTasks获得的正在运行的任务列表(在doc检查出的警告,我没有了解清楚)
  3. 当列表中的任务相匹配的ID上面,你可以得到活动在根域使用字段baseActivity