开发者

activities stack

Is there a way to vizualise the activity stack, at some moment 开发者_开发百科during debug, or normal run ?


You can get some useful information with the activity manager.

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

This will show you the top, bottom and size of the stack, and description may be useful. You will have to search the running tasks to find the current activity.

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

This has a pkgLst method that may be helpful.

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

Not as useful or straightforward as you were hoping for, but it might help.

Activity provides the getCallingActivity() method that you could add to logs in onPause and onResume as suggested before.

There is also if ( isChild() ) getParent(); for embedded activities.


Not that I am aware of. For within your own application, you can track this yourself by pushing yourself onto your own stack data structure in onResume() and popping yourself off of that stack in onPause().


There is no direct way i think, but a way is to put logs in all call backs lik on create/pause/resume/destroy/etc and see the calls(Ex:Log.d()).


On the emulator or in a rooted phone you can use the dumpsys shell command

adb shell dumpsys activity

which outputs the existing tasks. Here a little snippet

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}

You can even see the intent that started the activity

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 }

To extract only the Tasks, I use grep

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

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

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜