2010-04-07 16 views
12

Czy istnieje sposób na zwizualizowanie stosu działań, w pewnym momencie podczas debugowania lub normalnego uruchomienia?stos działań

Odpowiedz

6

Możesz uzyskać przydatne informacje z menedżerem aktywności.

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

Pokaże Ci górny, dolny i rozmiar stosu, a opis może być przydatny. Będziesz musiał przeszukać uruchomione zadania, aby znaleźć bieżącą aktywność.

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

Jest to metoda pkgLst, która może być pomocna.

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

Nie tak użyteczne i proste, jak się spodziewaliśmy, ale może pomóc.

Aktywność udostępnia metodę getCallingActivity(), którą można dodać do dzienników w trybie onPause i onResume, jak sugerowano wcześniej.

Istnieje również if (isChild()) getParent(); dla działań osadzonych.

+1

Wiem, że to stary qustion, ale pomógł mi, oprócz tego, że musiałem dodać to uprawnienie do AndroidManifest:

+0

@MarioLenci GET_TASKS jest nieaktualny w API 21 https://developer.android.com/reference/android/Manifest.permission.html#GET_TASKS –

0

Nie jestem tego świadomy. W ramach własnej aplikacji możesz śledzić to samodzielnie, przesuwając się na własną strukturę danych stosu w onResume() i wyskakując z tego stosu w onPause().

0

Nie myślę w sposób bezpośredni, ale sposobem jest umieszczenie logów we wszystkich wywołaniach, takich jak create/pause/resume/destroy/etc i zobacz wywołania (Ex: Log.d()).

0

na emulatorze lub ukorzenionych telefonu można użyć dumpsys powłoki polecenie

adb shell dumpsys activity 

który wyprowadza dotychczasowych zadań. Tutaj trochę urywek

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} 

Można nawet zobaczyć intencję, która rozpoczęła działalność

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 } 

aby wyodrębnić tylko te zadania, używam grep

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

Źródło: http://www.slideshare.net/RanNachmany/manipulating-android-tasks-and-back-stack