【发布时间】:2011-12-21 00:14:39
【问题描述】:
我有一个带有活动回栈 A -> B -> C -> D -> E 的应用程序。现在在活动 E 中,我想知道我从中导航的回栈活动。我怎么找到这个??
【问题讨论】:
标签: android back-stack activity-stack
我有一个带有活动回栈 A -> B -> C -> D -> E 的应用程序。现在在活动 E 中,我想知道我从中导航的回栈活动。我怎么找到这个??
【问题讨论】:
标签: android back-stack activity-stack
下面的代码可以用来提取所有的tasks以及back stack中每个task里面的top activity
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();
}
【讨论】:
可以使用“adb shell dumpsys activity activities”命令
供参考http://www.onsandroid.com/2015/01/find-back-stack-activities-in-android.html
【讨论】:
我认为你可以通过 registerActivityLifecycleCallbacks 的这个 API 监听活动的变化来做到这一点:
https://developer.android.com/reference/android/app/Application.ActivityLifecycleCallbacks.html
这将帮助您将自己的类添加到堆栈中,并根据需要查看完整状态。
【讨论】:
我不确定我能不能搞定...你想回到上一个活动吗?如果是这样,请完成当前活动,您将回到上一个活动。
【讨论】:
实际上,您可以使用 getRunningTasks 从 runningtaskinfo 中获取任务 id 然后,通过比较任务 id 使用 getRecentTasks 获取最近的任务信息。 现在您可以使用 startactivity 重新启动该活动,并在最近的任务信息中使用 baseintent。
【讨论】:
由于getRunningTasks(..) 已被弃用,或者如果您不想为您的应用添加特殊权限,如果所有活动都是您的,这里是一个替代解决方案:您可以标记一个标识符(不是活动本身,它可能在需要被垃圾收集)在单例Stack、LinkedList 或LinkedHashSet:在onPause() 中将标识符添加到堆栈并在onResume() 中删除它。
您可以检查该堆栈的内容以了解是否有任何活动以及它们已创建的顺序。
如果您的所有 Activity 都源自您应用的通用基础 Activity,您可以清理代码而忘记手动清理。
【讨论】:
我建议您使用startActivityForResult 而不是startActivity,然后为了检索origin/source 活动-调用getCallingActivity().getClassName()。
A 怎么知道它来自家里?
使用getIntent()其
getAction() -> android.intent.action.MAIN
和
getCategories() -> android.intent.category.LAUNCHER
【讨论】: