Activity를 이것 저것 띄우고 닫고 하다보면, 과연 내가 잘 하고 있나? 불안할 때가 있다.
더구나, 인텐트에 액티비티 관련 플래그를 사용하기 시작하면 그 불안감은 고조된다.
실제로 단 3개의 Activity가 destroy()되지 않은 채, 19개가 되는 현상을 겪었다. -0-a
물론, Activity의 생명주기를 로그로 찍어서 확인하는 것도 좋겠지만,
그래도 딱! Activity Stack의 모습을 볼 수 있으면 좋겠다는 생각에 방법을 찾아봤다.
* 방법 : 커멘드 창에서 "adb shell dumpsys activity" 실행
매우 긴 영문들이 뒤섞여 보인다.
처음에는 매우 난감했지만, Activity를 이래저래 띄우면서 테스트 한 결과에 의하면,
"Activity Stack"과 "Running Activities" 부분을 보면 된다.
"Activity Stack"에는 스택 순서대로 Hist #2, Hist #1, Hist #0 순으로 표기되어 있다.
즉, 단말기의 [이전]버튼을 누르면 ActivityA가 닫히고, 한 번 더 누르면 MainActivity가 닫힌다.
작업하는 중간중간에 다시 실행시켜보면, 정확히 화면에 보이는 Activity가 "Activity Stack" 로그의 최상위에 보여지게 된다.
Hist #0는 보통 안드로이드 런처(홈) Activity이다.
C:\Users\Juno>adb shell dumpsys activity
... 중략 ...
Activity stack:
* TaskRecord{461e6d10 #42 A com.juno.activitytest}
clearOnBackground=false numActivities=2 rootWasReset=false
affinity=com.juno.activitytest
intent={act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.juno.activitytest/.MainActivity}
realActivity=com.juno.activitytest/.MainActivity
lastActiveTime=6762895 (inactive for 6s)
* Hist #2: HistoryRecord{46096400 com.juno.activitytest/.ActivityA}
packageName=com.juno.activitytest processName=com.juno.activitytest
launchedFromUid=10026 app=ProcessRecord{461537b0 1050:com.juno.adpd.activitytest/10026}
Intent { flg=0x20000000 cmp=com.juno.activitytest/.ActivityA (has extras) }
frontOfTask=false task=TaskRecord{461e6d10 #42 A com.juno.livepoint}
taskAffinity=com.juno.activitytest
realActivity=com.juno.activitytest/.ActivityA
base=/data/app/com.juno.activitytest-1.apk/data/app/com.juno.activitytest-1.apk data=/data/data/com.juno.activitytest
labelRes=0x7f080000 icon=0x7f02000e theme=0x1030006
stateNotNeeded=false componentSpecified=true isHomeActivity=false
configuration={ scale=1.0 imsi=0/0 loc=ko_KR touch=3 keys=1/1/2 nav=2/1orien=2 layout=34 uiMode=17 seq=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
* Hist #1: HistoryRecord{46130618 com.juno.activitytest/.MainActivity}
packageName=com.juno.activitytest processName=com.juno.activitytest
launchedFromUid=2000 app=ProcessRecord{461537b0 1050:com.juno.activitytest/10026}
Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.juno.activitytest/.MainActivity }
frontOfTask=true task=TaskRecord{461e6d10 #42 A com.juno.activitytest}
taskAffinity=com.juno.activitytest
realActivity=com.juno.activitytest/.MainActivity
base=/data/app/com.juno.activitytest-1.apk/data/app/com.juno.activitytest-1.apk data=/data/data/com.juno.activitytest
labelRes=0x7f080000 icon=0x7f02000e theme=0x1030006
stateNotNeeded=false componentSpecified=true isHomeActivity=false
configuration={ scale=1.0 imsi=0/0 loc=ko_KR touch=3 keys=1/1/2 nav=2/1orien=2 layout=34 uiMode=17 seq=2}
launchFailed=false haveState=true icicle=Bundle[mParcelledData.dataSize=812]
state=STOPPED stopped=true delayedResume=false finishing=false
keysPaused=false inHistory=true persistent=false launchMode=0
fullscreen=true visible=false frozenBeforeDestroy=false thumbnailNeeded=false idle=true
* TaskRecord{461626c0 #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/com.android.launcher2.Launcher}
realActivity=com.android.launcher/com.android.launcher2.Launcher
lastActiveTime=6749602 (inactive for 19s)
* Hist #0: HistoryRecord{4615d870 com.android.launcher/com.android.launcher2.Launcher}
packageName=com.android.launcher processName=com.android.launcher
launchedFromUid=0 app=ProcessRecord{46162bb0 2292:com.android.launcher/10012}
Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000000 cmp=com.android.launcher/com.android.launcher2.Launcher }
frontOfTask=true task=TaskRecord{461626c0 #2 A com.android.launcher}
taskAffinity=com.android.launcher
realActivity=com.android.launcher/com.android.launcher2.Launcher
base=/system/app/Launcher2.apk/system/app/Launcher2.apk data=/data/data/com.android.launcher
labelRes=0x7f0c0002 icon=0x7f02005a theme=0x7f0d0000
stateNotNeeded=true componentSpecified=false isHomeActivity=true
configuration={ scale=1.0 imsi=0/0 loc=ko_KR touch=3 keys=1/1/2 nav=2/1orien=2 layout=34 uiMode=17 seq=2}
launchFailed=false haveState=true icicle=Bundle[mParcelledData.dataSize=4480]
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
Running activities (most recent first):
TaskRecord{461e6d10 #42 A com.juno.activitytest}
Run #2: HistoryRecord{46096400 com.juno.activitytest/.ActivityA}
Run #1: HistoryRecord{46130618 com.juno.activitytest/.MainActivity}
TaskRecord{461626c0 #2 A com.android.launcher}
Run #0: HistoryRecord{4615d870 com.android.launcher/com.android.launcher2.Launcher}
mPausingActivity: null
mResumedActivity: HistoryRecord{46096400 com.juno.activitytest/.ActivityA}
mFocusedActivity: HistoryRecord{46096400 com.juno.activitytest/.ActivityA}
mLastPausedActivity: HistoryRecord{4614cb90 com.juno.activitytest/.DetailActivity}
mCurTask: 42
... 중략 ...
C:\Users\Juno>
그림으로 그리면, 요런 모습이겠다.
[여담]
이런 로그 메시지를 분석하는 부분은 꽤 자신없는 부분이네요.
혹시나, 잘못된 내용은 가감없이 지적바랍니다.
Update #1
누군가 고맙게도 stack만 추려서 볼 수 있게, 만들어줬네요.
sed 명령어를 사용하려면 GnuWin32를 설치해야합니다.
http://sourceforge.net/projects/getgnuwin32/files/getgnuwin32/
adb shell dumpsys activity activities | sed -En -e "/Stack #/p " -e "/Running activities/,/Run #0/p"
출처 : http://stackoverflow.com/a/31107447/536078
'Android' 카테고리의 다른 글
[Android] Device Screen 관련 용어 정리 (0) | 2012.01.11 |
---|---|
[Android] onTouch 사용시, "ACTION_DOWN"만 들어오는 문제 (5) | 2012.01.09 |
Android APP에 구글 날씨 API 달기 [최신 날씨 아이콘 반영] (1) | 2011.01.27 |
Android App에 BUMP를 달자! #1 개요 (0) | 2011.01.24 |
Filter by API Level 사용하기 (0) | 2011.01.04 |