我有一个应用程序,活动栈为A -> B -> C -> D -> E。现在在活动E中,我想知道我从哪些后退栈活动导航而来。我该如何找到这个信息?
我有一个应用程序,活动栈为A -> B -> C -> D -> E。现在在活动E中,我想知道我从哪些后退栈活动导航而来。我该如何找到这个信息?
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();
}
getRunningTasks(..)
已被弃用,或者如果您不想为应用程序添加特殊权限,则可以使用另一种解决方案,如果所有活动都是您自己的,则可以在单例Stack
、LinkedList
或LinkedHashSet
中标记标识符(不是活动本身,因为它可能需要进行垃圾回收):在onPause()
中将标识符添加到堆栈中,在onResume()
中将其删除。
您可以检查那些堆栈的内容,以了解是否有任何活动以及它们创建的顺序。
如果您的所有活动都派生自您应用程序的共同基础活动,则可以清理代码并忘记手动执行此操作。
startActivityForResult
而不是startActivity
,然后为了检索来源/源
活动-调用getCallingActivity().getClassName()
。getIntent()
它的
getAction() -> android.intent.action.MAIN
和
getCategories() -> android.intent.category.LAUNCHER
https://developer.android.com/reference/android/app/Application.ActivityLifecycleCallbacks.html
这将帮助您添加到自己的类堆栈,并按照您的意愿查看完整状态。实际上,您可以使用getRunningTasks从runningtaskinfo获取任务ID,然后通过比较任务ID使用getRecentTasks获取recenttaskinfo。现在,您可以使用recenttaskinfo中的baseintent使用startactivity重新启动该活动。
我不确定我理解得很好...你想回到之前的活动吗?如果是这样,请完成当前的活动,你就会回到之前的活动。
最明显的答案是将引用保存在某个安全的地方,例如在实用程序类中作为静态变量按特定顺序存储,例如在列表中。但这样做可能会导致内存泄漏,因此请确保手动处理并在需要时进行处理。