Есть ли способ визуализировать стек активности, в какой-то момент во время отладки или обычного запуска?
Стек операций
Ответ 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