我有一个带有活动回栈 A -> B -> C -> D -> E 的应用程序。现在在活动 E 中,我想知道我从中导航的回栈活动。我怎么找到这个??
7 回答
下面的代码可以用来提取所有的任务,以及后栈中每个任务内的顶部活动
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 活动活动” 命令
供参考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 获取 recenttaskinfo。现在您可以使用 startactivity 重新启动该活动,并在最近的任务信息中使用 baseintent。
正如getRunningTasks(..)
已被弃用的那样,或者如果您不想为您的应用程序添加特殊权限,如果所有活动都是您的,这里是一个替代解决方案:您可以标记一个标识符(不是活动本身,它可能需要被垃圾收集)在单例Stack
中,LinkedList
或LinkedHashSet
: inonPause()
将标识符添加到堆栈中并将其删除onResume()
。
您可以检查该堆栈的内容以了解是否有任何活动以及它们已创建的顺序。
如果您的所有活动都源自应用程序的公共基础活动,则您可以清理代码而忘记手动执行此操作。
我不确定我能不能搞定...你想回到之前的活动吗?如果是这样,请完成当前活动,您将回到上一个活动。
我建议你使用startActivityForResult
而不是startActivity
,然后为了检索origin/source
活动调用 getCallingActivity().getClassName()
。
A 怎么知道它来自家里?使用getIntent()
它的
getAction() -> android.intent.action.MAIN
和
getCategories() -> android.intent.category.LAUNCHER