Стек операций

Есть ли способ визуализировать стек активности, в какой-то момент во время отладки или обычного запуска?

Ответ 1

Вы можете получить полезную информацию у менеджера активности.

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();

Не так полезно или просто, как вы надеялись, но это может помочь.

Активность предоставляет метод getCallingActivity(), который вы можете добавить к журналам в onPause и onResume, как было предложено ранее.

Существует также if ( isChild() ) getParent(); для встроенных действий.

Ответ 2

Не то, что я знаю. В своем собственном приложении вы можете отследить это самостоятельно, нажав на свою собственную структуру данных стека в onResume() и выталкивая себя из этого стека в onPause().

Ответ 3

Нет прямого способа, я думаю, но способ заключается в том, чтобы поставить журналы во всех обратных вызовах на create/pause/resume/destroy/etc и увидеть вызовы (Ex: Log.d()).

Ответ 4

На эмуляторе или в корневом телефоне вы можете использовать команду оболочки dumpsys

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