我有一个带有活动的应用程序堆栈A - > B - > C - > D - > E.现在在活动E,我想知道我导航的后台活动。我怎么找到这个??
答案 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.ActivityLifecycleCallbacks.html
这将帮助您添加到自己的类堆栈中,并根据需要查看完整状态。
答案 3 :(得分:0)
我不确定我做得好......你想回到以前的活动吗?如果是这样,请完成当前活动,然后返回上一个活动。
答案 4 :(得分:0)
实际上,您可以使用getRunningTasks从runningtaskinfo获取任务ID 然后,通过比较任务ID,使用getRecentTasks获取recenttaskinfo。 现在,您可以使用startactivity重新启动该活动,并使用recenttaskinfo中的baseintent。
答案 5 :(得分:0)
由于getRunningTasks(..)
已被弃用,或者如果您不想为您的应用添加特殊权限,这里是一个替代解决方案,如果所有活动都是您的:您可以标记一个标识符(而不是活动本身是可能需要在单个Stack
,LinkedList
或LinkedHashSet
中进行垃圾回收:在onPause()
中将标识符添加到堆栈并将其删除{{1 }}。
您可以检查该堆栈的内容,以了解是否存在任何活动及其创建顺序。
如果您的所有活动都源自应用的常见基本活动,则可以清理代码并忘记手动执行此操作。
答案 6 :(得分:0)
我建议你使用startActivityForResult而不是startActivity,然后为了检索源/源活动 - 调用getCallingActivity()。getClassName()。
A怎么会知道它来自家里? 使用getIntent(),它的getAction() - &gt; android.intent.action.MAIN 和getCategories() - &gt; android.intent.category.LAUNCHER