View the Task's activity stack
I just started developing a simple Android application while I'm still learning the platform.
I'm using Eclipse IDE with the ADT plugin 0.9.6.
I need to know if it's possible to view the Activity
stack that is associated with a Task?
Is there any way through the DDMS tool or through any other technique?
Essentially what I need is to be able to see the stack activity of a task to make sure that the application behaves as expected.
I know that it's possible to control the task behavior in some extent through the use of flags in the Intent
object and through some attributes of the <activity>
element.
However it would be nice to have a sort of tool - especially in debug mode or so - that would allow developers to see the Activity
stack straight forward.
Solution 1:
From the command line, you can use: adb shell dumpsys activity
This asks the activity manager to print a dump of its current state. The first part of that is the complete activity history, organized by task. There is also a lot of stuff printed after that, so you may need to scroll up a bit to find what you want.
Here is an example of its output (the exact contents varies across platform versions), showing the top task being contacts with two activities, and behind that the launcher with one activity:
Activities in Current Activity Manager State: * TaskRecord{44d07218 #4 A android.task.contacts} clearOnBackground=true numActivities=2 rootWasReset=true affinity=android.task.contacts intent={act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10600000 cmp=com.android.contacts/.DialtactsActivity bnds=[125,640][235,758]} origActivity=com.android.contacts/.DialtactsContactsEntryActivity realActivity=com.android.contacts/.DialtactsActivity lastActiveTime=288203177 (inactive for 14s) * Hist #8: HistoryRecord{44b87a30 com.android.contacts/.ViewContactActivity} packageName=com.android.contacts processName=android.process.acore launchedFromUid=10004 app=ProcessRecord{44c4f348 1168:android.process.acore/10004} Intent { act=android.intent.action.VIEW dat=content://com.android.contacts/contacts/lookup/144i148.144i461a29500afc8eeb/1927 cmp=com.android.contacts/.ViewContactActivity } frontOfTask=false task=TaskRecord{44d07218 #4 A android.task.contacts} taskAffinity=android.task.contacts realActivity=com.android.contacts/.ViewContactActivity base=/system/app/Contacts.apk/system/app/Contacts.apk data=/data/data/com.android.contacts labelRes=0x7f090012 icon=0x7f02006b theme=0x7f0e0004 stateNotNeeded=false componentSpecified=false isHomeActivity=false configuration={ scale=1.0 imsi=310/4 loc=en_US touch=3 keys=2/1/2 nav=2/2 orien=1 layout=34} resultTo=HistoryRecord{44d174d0 com.android.contacts/.DialtactsContactsEntryActivity} resultWho=favorites resultCode=2 launchFailed=false haveState=false icicle=null state=RESUMED stopped=false delayedResume=false finishing=false keysPaused=false inHistory=true persistent=false launchMode=0 fullscreen=true visible=true frozenBeforeDestroy=false thumbnailNeeded=false idle=true waitingVisible=false nowVisible=true * Hist #7: HistoryRecord{44d174d0 com.android.contacts/.DialtactsContactsEntryActivity} packageName=com.android.contacts processName=android.process.acore launchedFromUid=10004 app=ProcessRecord{44c4f348 1168:android.process.acore/10004} Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.android.contacts/.DialtactsContactsEntryActivity bnds=[125,640][235,758] } frontOfTask=true task=TaskRecord{44d07218 #4 A android.task.contacts} taskAffinity=android.task.contacts realActivity=com.android.contacts/.DialtactsActivity base=/system/app/Contacts.apk/system/app/Contacts.apk data=/data/data/com.android.contacts labelRes=0x7f090007 icon=0x7f02006b theme=0x7f0e0000 stateNotNeeded=false componentSpecified=true isHomeActivity=false configuration={ scale=1.0 imsi=310/4 loc=en_US touch=3 keys=2/1/2 nav=2/2 orien=1 layout=34} launchFailed=false haveState=true icicle=Bundle[mParcelledData.dataSize=4196] state=STOPPED stopped=true delayedResume=false finishing=false keysPaused=false inHistory=true persistent=false launchMode=2 fullscreen=true visible=false frozenBeforeDestroy=false thumbnailNeeded=false idle=true * TaskRecord{44c4ee90 #2 A com.android.launcher} clearOnBackground=true numActivities=1 rootWasReset=true affinity=com.android.launcher intent={act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10600000 cmp=com.android.launcher/.Launcher} realActivity=com.android.launcher/.Launcher lastActiveTime=214734838 (inactive for 73483s) * Hist #6: HistoryRecord{44c4d988 com.android.launcher/.Launcher} packageName=com.android.launcher processName=android.process.acore launchedFromUid=0 app=ProcessRecord{44c4f348 1168:android.process.acore/10004} Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000000 cmp=com.android.launcher/.Launcher } frontOfTask=true task=TaskRecord{44c4ee90 #2 A com.android.launcher} taskAffinity=com.android.launcher realActivity=com.android.launcher/.Launcher base=/system/app/Launcher.apk/system/app/Launcher.apk data=/data/data/com.android.launcher labelRes=0x7f0a0000 icon=0x7f020015 theme=0x103005f stateNotNeeded=true componentSpecified=false isHomeActivity=true configuration={ scale=1.0 imsi=310/4 loc=en_US touch=3 keys=2/1/2 nav=2/2 orien=1 layout=34} launchFailed=false haveState=true icicle=Bundle[mParcelledData.dataSize=5964] state=STOPPED stopped=true delayedResume=false finishing=false keysPaused=false inHistory=true persistent=false launchMode=2 fullscreen=true visible=false frozenBeforeDestroy=false thumbnailNeeded=false idle=true
Solution 2:
You can use the following command in your command line to see the tasks and backstacks in the system:
adb shell dumpsys activity activities | sed -En -e '/Stack #/p' -e '/Running activities/,/Run #0/p'
Or you can try TaskLogger, a simple tool I created which can monitor all activities and tasks in your App, and output them in Logcat in real-time.
Solution 3:
If you want to inspect the task stack of a specific package, the following command will do:
adb shell dumpsys activity activities | grep PACKAGE_NAME | grep Hist
Solution 4:
I know this is an old question but, this functionality is now baked into Android Studio:
Then in the resulting text file, search for ACTIVITY
(all caps):