活动堆栈

时间:2010-04-07 07:07:22

标签: android

有没有办法在调试或正常运行的某个时刻可视化活动堆栈?

4 个答案:

答案 0 :(得分:6)

您可以通过活动管理器获得一些有用的信息。

ActivityManager         manager = (ActivityManager)getApplication().getSystemService( Activity.ACTIVITY_SERVICE );

这将显示堆栈的顶部,底部和大小,描述可能很有用。您必须搜索正在运行的任务以查找当前活动。

RunningTaskInfo         task = manager.getRunningTasks( 10 ).get( 0 );
task.baseActivity();
task.numActivities();
task.topActivity();
task.description();

这有一个pkgLst方法,可能会有所帮助。

RunningAppProcessInfo   app = manager.getRunningAppProcesses().get( 0 );
app.pkgList();

不像你希望的那样有用或直截了当,但它可能会有所帮助。

Activity提供了getCallingActivity()方法,您可以按照之前的建议添加到onPause和onResume中的日志中。

嵌入式活动也有if ( isChild() ) getParent();

答案 1 :(得分:0)

不是我知道的。在您自己的应用程序中,您可以通过在onResume()中将自己推送到自己的堆栈数据结构并在onPause()中弹出自己的堆栈来自行跟踪。

答案 2 :(得分:0)

我认为没有直接的方法,但是一种方法是将日志放在create / pause / resume / destroy / etc上的所有回调函数中并查看调用(例如:Log.d())。

答案 3 :(得分:0)

在模拟器或root手机中,您可以使用 dumpsys shell命令

adb shell dumpsys activity

输出现有任务。这里有一个小片段

Running activities (most recent first):
TaskRecord{407d8a30 #6 A com.actionbarsherlock.sample.demos}
  Run #2: HistoryRecord{40792ec8 com.actionbarsherlock.sample.demos/.ActionItems}
  Run #1: HistoryRecord{40735008 com.actionbarsherlock.sample.demos/.SampleList}
TaskRecord{406de0b8 #2 A com.android.launcher}
  Run #0: HistoryRecord{405802c8 com.android.launcher/com.android.launcher2.Launcher}

您甚至可以看到启动活动的意图

TaskRecord{407d8a30 #6 A com.actionbarsherlock.sample.demos}
clearOnBackground=false numActivities=2 rootWasReset=true
affinity=com.actionbarsherlock.sample.demos
intent={act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.actionbarsherlock.sample.demos/.SampleList}
realActivity=com.actionbarsherlock.sample.demos/.SampleList
lastActiveTime=1492068 (inactive for 2s)
* Hist #2: HistoryRecord{40792ec8 com.actionbarsherlock.sample.demos/.ActionItems}
    packageName=com.actionbarsherlock.sample.demos processName=com.actionbarsherlock.sample.demos
    launchedFromUid=10040 app=ProcessRecord{40650b68 1840:com.actionbarsherlock.sample.demos/10040}
    Intent { cmp=com.actionbarsherlock.sample.demos/.ActionItems }

要仅提取任务,我使用grep

adb shell dumpsys activity | grep "Running activities" -A 10

来源:http://www.slideshare.net/RanNachmany/manipulating-android-tasks-and-back-stack