2011-11-03 49 views

回答

0

我不确定自己能否顺利完成...您想回到之前的活动吗?如果是这样,完成当前的活动,你会回到前一个。

+0

我想在活动E找到我从A,B,C,D导航的东西 – azzits

+0

好的,Rajdeep Dua有答案。 :P –

5

下面的代码可用于提取所有任务,并在后面堆栈中的每个任务中的顶级活动

ActivityManager m = (ActivityManager) ctx.getSystemService(ctx.ACTIVITY_SERVICE); 
List<RunningTaskInfo> runningTaskInfoList = m.getRunningTasks(10); 
Iterator<RunningTaskInfo> itr = runningTaskInfoList.iterator(); 
while(itr.hasNext()){ 
    RunningTaskInfo runningTaskInfo = (RunningTaskInfo)itr.next(); 
    int id = runningTaskInfo.id; 
    CharSequence desc= runningTaskInfo.description; 
    int numOfActivities = runningTaskInfo.numActivities; 
    String topActivity = runningTaskInfo.topActivity.getShortClassName(); 
} 
+4

这与后退堆栈不同 - 后退堆栈可能涉及同一任务中的多个活动。我不认为有办法做OP的要求。 –

+2

此外还需要GET_TASK权限 – for3st

+0

从LOLLIPOP(sdk 21+)开始,由于安全原因,这已过时并且仅返回以前版本中提供的信息的一小部分子集 – for3st

0

实际上,你可以从runningtaskinfo使用getRunningTasks 和任务ID,然后,通过比较任务ID,使用getRecentTasks获取recenttaskinfo。 现在您可以使用startactivity和recenttaskinfo中的baseintent重新启动该活动。

0

由于getRunningTasks(..)已被弃用,或者如果你不想特殊权限,在此添加到您的应用程序如果所有的活动都是你的,你可以选择一个解决方案:你可以在一个单身人士标记一个标识符(不是活动本身是否需要垃圾收集)Stack,LinkedListLinkedHashSetonPause() a将标识符添加到堆栈并在onResume()中删除。

您可以检查堆栈的内容以确定是否存在任何活动以及它们的创建顺序。

如果您的所有活动都是从您的应用程序的公共基本活动派生的,则可以清理您的代码并忘记手动执行此操作。

0

我建议您使用startActivityForResult而不是startActivity,然后为了检索源/源活动 - 调用getCallingActivity()。getClassName()。

A怎么会知道它是从家里来的? 使用getIntent()它的getAction() - > android.intent.action.MAIN 和getCategories() - > android.intent.category.LAUNCHER