2010-04-07 11 views
12

C'è un modo per rendere visibile lo stack di attività, in un momento durante il debug o la normale esecuzione?stack di attività

risposta

6

È possibile ottenere alcune informazioni utili con il gestore attività.

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

Questo ti mostrerà la parte superiore, inferiore e dimensione dello stack, e la descrizione può essere utile. Dovrai cercare le attività in esecuzione per trovare l'attività corrente.

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

Questo ha un metodo pkgLst che può essere utile.

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

Non utile o semplice come si speravano, ma potrebbe aiutare.

L'attività fornisce il metodo getCallingActivity() che è possibile aggiungere ai registri onPause e onResume come suggerito in precedenza.

C'è anche if (isChild()) getParent(); per attività incorporate.

+1

So che è una vecchia qustion, ma mi ha aiutato, tranne che ho bisogno di aggiungere questa autorizzazione ad AndroidManifest:

+0

@MarioLenci GET_TASKS è obsoleto in API 21 https://developer.android.com/reference/android/Manifest.permission.html#GET_TASKS –

0

Non che io sappia. Per quanto riguarda la tua applicazione, puoi tenerne traccia da solo spingendoti sulla tua struttura di dati dello stack in onResume() e uscirne fuori dallo stack in onPause().

0

Non esiste un modo diretto, penso, ma un modo è di mettere i registri in tutte le richiamate come lik su create/pause/resume/destroy/etc e vedere le chiamate (Es: Log.d()).

0

sull'emulatore o in un telefono radicata è possibile utilizzare il dumpsys comando di shell

adb shell dumpsys activity 

che emette i compiti esistenti. Ecco un piccolo frammento

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} 

si può anche vedere l'intento che ha iniziato l'attività

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 } 

Per estrarre solo le attività, io uso grep

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

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

Problemi correlati