Androidのタスク内容をリアルタイムに表示させてみた

タスク(Activity Stack, Activityスタック)の事は入門書とかにも載ってて概念はわかるけど、実際のスタック状況は把握しづらい。けど、リアルタイムで簡単に確認するツールが見当たらない。無いなら作ろうというわけで自作してみた。他の人ってどうやってタスク状況を把握してるんだろ?

タスク状況のリアルタイム表示するバッチファイル

aam_watch.bat

@echo off
REM Android Activity Manager内のTask情報を監視
REMCygwinとかのgrepとsleepコマンド
:loop
cls
adb shell dumpsys activity | grep -A 1000 "Running activities" | grep -B 1000 "mResumedActivity"
sleep 2
goto loop

動作にはWindows, Cygwinとかのgrepとsleepコマンド, Android SDKが必要。
もっとスマートな実装方法がありそうだし、たまに表示がおかしかったりするけど、とりあえず動くので公開。

実行結果

C:\> aam_watch.bat
 Running activities (most recent first):
   TaskRecord{40a2ae68 #135 A android.task.contacts}
     Run #3: HistoryRecord{40550840 com.google.android.gm/.ComposeActivity}
     Run #2: HistoryRecord{4054ba50 com.android.contacts/.ProfileLayerActivity}
     Run #1: HistoryRecord{408f6248 com.android.contacts/.DialtactsContactsEntryActivity}
   TaskRecord{40515ab0 #2 A com.android.launcher}
     Run #0: HistoryRecord{40766270 com.android.launcher/com.android.launcher2.Launcher}

  mPausingActivity: null

  mResumedActivity: HistoryRecord{405c4f48 com.android.launcher/com.android.launcher2.Launcher}

ホーム画面→Contacts→gmailに画面遷移したときのタスク。
複数のアプリをまたいでタスクが構成されているのが視覚的にわかります。
今、端末上に表示されているActivityも簡単に確認できます。

Activityに関する各種情報をファイルに保存するバッチファイル

こちらはActivity Managerの情報を取得してファイルに保存するだけ。
ファイル名はDDMSのスクリーンショットファイル名に合わせたつもり。

aam_step.bat

@echo off
REM Android Activity Managerの情報を取得しファイルに保存する
SET DT=%DATE:~-10%
SET TM=%TIME: =0%
set FILE=dump_am-%DT:~0,4%-%DT:~5,2%-%DT:~8,2%-%TM:~0,2%%TM:~3,2%%TM:~6,2%.txt
adb shell dumpsys activity > %FILE%

蛇足

下記コマンドでdumpsys activityのヘルプが表示される
他にもデバッグに役立ちそうなオプションがいろいろあるけど把握してない

adb shell dumpsys activity -h

  C:\>adb shell dumpsys activity -h
  Activity manager dump options:
  [-a] [-h] [cmd] ...
  cmd may be one of:
    a[ctivities]: activity stack state
    b[roadcasts]: broadcast state
    i[ntents]: pending intent state
    p[rocesses]: process state
    o[om]: out of memory management
    prov[iders]: content provider state
    s[ervices]: service state
    service [name]: service client-side state