2010-04-07 187 views
12

有沒有辦法在調試過程中的某個時刻對活動堆棧進行vizualise或正常運行?活動堆棧

回答

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

我知道這是一個古老的問題,但它幫助我,除了我需要將此權限添加到AndroidManifest: 2012-01-31 11:26:34

+0

@MarioLenci GET_TASKS在API 21中已棄用https://developer.android.com/reference/android/Manifest.permission.html#GET_TASKS – 2016-10-14 09:52:18

0

不是我所知道的。對於您自己的應用程序,您可以通過將自己推入onResume()中自己的堆棧數據結構並自行跳出onPause()中的堆棧來自行跟蹤。

0

我認爲沒有直接的方式,但一種方法是將日誌放入創建/暫停/恢復/銷燬/等所有回調函數中,並查看調用(例如:Log.d())。

0

在模擬器上或在植根手機,您可以使用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