如何在Android应用程序中找到后台堆栈活动?

时间:2011-11-03 09:24:06

标签: android back-stack activity-stack

我有一个带有活动的应用程序堆栈A - > B - > C - > D - > E.现在在活动E,我想知道我导航的后台活动。我怎么找到这个??

7 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分:5)

您可以使用&#34; adb shell dumpsys活动&#34; 命令

供参考 http://www.onsandroid.com/2015/01/find-back-stack-activities-in-android.html

答案 2 :(得分:1)

我认为你可以通过registerActivityLifecycleCallbacks的这个API听取活动的变化来做到这一点:

https://developer.android.com/reference/android/app/Application.html#registerActivityLifecycleCallbacks(android.app.Application.ActivityLifecycleCallbacks)

https://developer.android.com/reference/android/app/Application.ActivityLifecycleCallbacks.html

这将帮助您添加到自己的类堆栈中,并根据需要查看完整状态。

答案 3 :(得分:0)

我不确定我做得好......你想回到以前的活动吗?如果是这样,请完成当前活动,然后返回上一个活动。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

由于getRunningTasks(..)已被弃用,或者如果您不想为您的应用添加特殊权限,这里是一个替代解决方案,如果所有活动都是您的:您可以标记一个标识符(而不是活动本身是可能需要在单个StackLinkedListLinkedHashSet中进行垃圾回收:在onPause()中将标识符添加到堆栈并将其删除{{1 }}。

您可以检查该堆栈的内容,以了解是否存在任何活动及其创建顺序。

如果您的所有活动都源自应用的常见基本活动,则可以清理代码并忘记手动执行此操作。

答案 6 :(得分:0)

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

A怎么会知道它来自家里? 使用getIntent(),它的getAction() - &gt; android.intent.action.MAIN 和getCategories() - &gt; android.intent.category.LAUNCHER