下記のコマンドを実行することで、現在動作しているActivityやActivityスタックの状態
をダンプして確認することが可能です。
adb shell dumpsys activity activities
実行すると下記のようなログが大出力されます。
# ダンプログ出力元クラスは下記
# com.android.server.am.ActivityManagerService.dumpHistoryList
# (FileDescriptor, PrintWriter, List, String, String, boolean, boolean, boolean, String)
ACTIVITY MANAGER ACTIVITIES (dumpsys activity activities)
Main stack:
* TaskRecord{411ae508 #2 A com.android.launcher}
... 略 ...
Running activities (most recent first):
TaskRecord{411ae508 #2 A com.android.launcher}
Run #1: ActivityRecord{411ab270 com.android.lau...}
... 略 ...
【Main stack情報】
ActivityやActivityStackの状態を確認したい場合はMain stack情報が役に立ちます。
情報の内容をみていきましょう。
参照するMain stack情報は下記です。
* TaskRecord{41222188 #12 A yuki.activitystack}
numActivities=1 rootWasReset=false
affinity=yuki.activitystack
intent={act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=yuki.activitystack/.StandardActivity}
realActivity=yuki.activitystack/.StandardActivity
askedCompatMode=false
lastThumbnail=null lastDescription=null
lastActiveTime=2827820 (inactive for 4s)
* Hist #1: ActivityRecord{41148798 yuki.activitystack/.StandardActivity}
packageName=yuki.activitystack processName=yuki.activitystack
launchedFromUid=0 app=ProcessRecord{412115e8 1007:yuki.activitystack/10043}
Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=yuki.activitystack/.StandardActivity }
frontOfTask=true task=TaskRecord{41222188 #12 A yuki.activitystack}
taskAffinity=yuki.activitystack
realActivity=yuki.activitystack/.StandardActivity
base=/data/app/yuki.activitystack-1.apk/data/app/yuki.activitystack-1.apk data=/data/data/yuki.activitystack
labelRes=0x7f040001 icon=0x7f020000 theme=0x0
stateNotNeeded=false componentSpecified=true isHomeActivity=false
config={1.0 310mcc260mnc en_US layoutdir=0 sw480dp w480dp h775dp lrg long port finger qwerty/v/v tball/v s.4}
compat={160dpi always-compat}
launchFailed=false haveState=false icicle=null
state=RESUMED stopped=false delayedResume=false finishing=false
keysPaused=false inHistory=true visible=true sleeping=false idle=true
fullscreen=true noDisplay=false immersive=false launchMode=0
frozenBeforeDestroy=false thumbnailNeeded=false forceNewConfig=false
thumbHolder=TaskRecord{41222188 #12 A yuki.activitystack}
lastVisibleTime=+47m8s986ms
waitingVisible=false nowVisible=true
2行目~8行目:タスクレコードの状態情報です。
各情報の概要:
numActivities:このタスクに属しているActivityの数
rootWasReset:タスクルートのintentがFLAG_ACTIVITY_RESET_TASK_IF_NEEDEDを持
っている場合にtrueを返す。
affinity:タスクのアフィニティ名。あるいはnull
intent:タスクを開始した時のIntent情報
realActivity:タスク開始時の実Activity情報(エイリアスの場合はtargetComponent名)
askedCompatMode:このタスクレコードが互換性モードを求められたか?
lastThumbnail:サムネイル画像情報
lastDescription:サムネイルのディスクリプション情報
lastActiveTime:最後に活動していた時間(elapsedRealtime)。
(Inactive *s)内は非活動時間
9行目:アクティビティレコードインスタンスの情報です。
フォーマット:* Hist #(A): ActivityRecord{(B) (C)}
(A):ログ用識別番号
(B):アクティビティレコードのハッシュ値
(C):インテントに含まれるコンポーネット名
10行目~28行目:アクティビティレコードの状態情報です。
各情報の概要:
packageName:コンポーネントのパッケージ名
processName:コンポーネントのプロセス名
launchedFromUid:Activity起動元のUID
app:アプリケーションプロセス情報
Intent:Activity生成時に指定されたIntent情報
frontOfTask:タスクのルートアクティビティかどうか?
task:このActivityが属するタスクレコード情報
taskAffinity:アクティビティのタスクアフィニティ情報
realActivity:コンポーネント名。エイリアスActivityの場合はそのtargetActivity
base:アプリリソースの配置場所
data:アプリデータの保存場所
labelRes:Activityラベルのリソース情報
icon:Activityアイコンのリソース情報
theme:Activityテーマのリソース情報
stateNotNeeded:stateNotNeededフラグの有無
componentSpecified:明示的Intentによる呼び出しか?
isHomeActivity:ランチャーActivityか?
config:最後にActivityに適用されたconfig
compat:最後に使用したcompatモード
launchFailed:Activity起動で2ndトライに失敗したか?
haveState:最後のActivity状態を得たか? #pauseによる状態保存?
icicle:最後に保存されたActivityの状態
state:Activity状態(RESUME,PAUSE,DESTROYED等)
stopped:Activityは停止しているか?
delayedResume:呼び出しもとが再開の遅延を求めているか?
finishing:破棄予定であるか?
keysPaused:キーディスパッチが当該Activityのため停止しているか?
inHistory:当該Activityがヒストリスタックにあるか?
visible:Activityのウィンドウは表示中か?
sleeping:Activity状態はスリープか?
idle:Activity状態はアイドルか?
fullscreen:全画面をカバーするか?
noDisplay:Activityは表示されていないか?
immersive:FLAG_IMMERSIVEがONか?(割込み拒否モードか?)
launchMode:Activityの起動モード
(Standard(Multiple)=0/SingleTop=1/SingleTask=2/SingleInstance=3)
frozenBeforeDestroy:frozen状態だかまだDestroyされていない状態か?
thumbnailNeeded:サムネイルを要求されているか?
forceNewConfig:次回、新たなconfigでActivity再生成されるか?
thumbHolder:サムネイル情報
lastVisibleTime:直前のActivityが可視化された時間(uptimeMillis)
waitingVisible:再表示の待ちか?
nowVisible:Activityウィンドウは表示されているか?
1/10000の再現率の不具合や再現状況や手順が不明な場合、Activityの状態がわかるこの
ログ情報を活用すれば、再現手順や前提条件が見えてきます。
bugreportによるログ取得でも同様のログが含まれているのですが、出力されるログの量が
膨大なため、手軽にActivity/ActivityStackの状態を確認したい時等に便利です。
Running activitiesの情報は、変数名からなんとなく内容の分かるものばかりなので省略
します。
13/02/09 追記---
ダンプ情報について、例えばテーマ情報(theme)情報はマニフェスト上で定義されたものが反映され、
ソースコード上で動的に設定されたテーマについては反映されません。
---
以上です。