您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關(guān)dumpsys命令怎么在Android項(xiàng)目中使用,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
在Android手機(jī)上, 通過(guò)使用adb shell命令可以進(jìn)入android系統(tǒng)的shell, 該shell除支持一些常用的標(biāo)準(zhǔn)命令之外,還支持一些和android系統(tǒng)相關(guān)的其他命令, 這些命令可以打印出系統(tǒng)當(dāng)前的狀態(tài)信息。 dumpsys就是這樣一個(gè)命令。
使用 adb shell 進(jìn)入命令行, 敲入dumpsys, 打印出的信息超級(jí)多, 在我的nexus 5機(jī)器上,輸出多達(dá)67000行。 首先從打印信息的開始部分看起:
Currently running services: SurfaceFlinger accessibility account activity alarm android.security.keystore appops appwidget assetatlas audio backup battery batterypropreg batterystats bluetooth_manager clipboard commontime_management connectivity consumer_ir content country_detector cpuinfo dbinfo device_policy devicestoragemonitor diskstats display display.qservice dreams drm.drmManager dropbox entropy gfxinfo hardware input input_method iphonesubinfo isms location lock_settings media.audio_flinger media.audio_policy media.camera media.player media_router meminfo mount netpolicy netstats network_management nfc notification package permission phone power print procstats samplingprofiler scheduling_policy search sensorservice serial servicediscovery simphonebook sip statusbar telephony.registry textservices uimode updatelock usagestats usb user vibrator wallpaper wifi wifip2p window
由此可知,該命令打印出的是系統(tǒng)當(dāng)前的所有正在運(yùn)行的服務(wù)的信息。從中可以看到我們常見(jiàn)的一些服務(wù)。 activity表示的是ActivityManagerService,用于管理應(yīng)用程序的四大組件, appops表示的是AppOpsManagerService, 用于管理和配置權(quán)限。window表示的是WindowManagerService, 用于管理系統(tǒng)中的窗口, account表示的是AccountManagerService,用于管理系統(tǒng)中的賬戶信息。
在輸出信息中, 緊接著的是每個(gè)服務(wù)當(dāng)前的詳細(xì)狀態(tài)信息,每個(gè)服務(wù)的狀態(tài)信息一般都比較多, 下面列舉一個(gè)信息較少的服務(wù)信息:
------------------------------------------------------------------------------- DUMP OF SERVICE accessibility: ACCESSIBILITY MANAGER (dumpsys accessibility) User state[attributes:{id=0, currentUser=true, accessibilityEnabled=false, touchExplorationEnabled=false, displayMagnificationEnabled=false} services:{}] -------------------------------------------------------------------------------
每個(gè)服務(wù)信息之間使用橫線間隔。
在開發(fā)過(guò)程中, 使用dumpsys的最常用的用途是查看ActivityManagerService服務(wù)的信息。 下面重點(diǎn)分析ActivityManagerService。 該服務(wù)的信息從下面一行開始:
------------------------------------------------------------------------------- DUMP OF SERVICE activity:
我們知道android應(yīng)用程序的四大組件中有三個(gè)是由intent來(lái)驅(qū)動(dòng)的。所以在ActivityManagerService的信息中,專門有一部分來(lái)記錄當(dāng)前待處理的Intent, 稱為pending intent 。格式如下:
ACTIVITY MANAGER PENDING INTENTS (dumpsys activity intents) * PendingIntentRecord{65ced5f0 com.baidu.BaiduMap broadcastIntent} uid=10084 packageName=com.baidu.BaiduMap type=broadcastIntent flags=0x0 requestIntent=act=com.baidu.locTest.LocationServer4.1.8 sent=true canceled=false * PendingIntentRecord{66412b40 com.android.phone broadcastIntent} uid=1001 packageName=com.android.phone type=broadcastIntent flags=0x0 requestIntent=act=com.android.phone.ACTION_CALL_BACK_FROM_NOTIFICATION dat=tel:153%201571%209213 cmp=com.android.phone/.PhoneGlobals$NotificationBroadcastReceiver
直接在shell中鍵入dumpsys activity intents, 會(huì)直接得到這些信息。 每個(gè)待處理的intent在ActivityManagerService內(nèi)部使用一個(gè)PendingIntentRecord對(duì)象表示, 并且會(huì)顯示出所在應(yīng)用的包名, 并且會(huì)指定該intent是用來(lái)發(fā)送廣播, 啟動(dòng)activity或是啟動(dòng)service。
下面的信息是系統(tǒng)中的broadcast receiver的狀態(tài)信息, 從下面一行開始:
------------------------------------------------------------------------------- ACTIVITY MANAGER BROADCAST STATE (dumpsys activity broadcasts)
直接在shell中鍵入umpsys activity broadcasts, 會(huì)直接得到這部分信息。
首先會(huì)列出系統(tǒng)中所有注冊(cè)的廣播接收者, 格式如下:
Registered Receivers: * ReceiverList{660f2e40 857 com.android.systemui/10012/u-1 remote:660f2ca0} app=857:com.android.systemui/u0a12 pid=857 uid=10012 user=-1 Filter #0: BroadcastFilter{660f2ea0} Action: "android.intent.action.SHOW_BRIGHTNESS_DIALOG" * ReceiverList{66045cf0 3867 com.meitu.meiyancamera:pushservice/10091/u0 remote:65e756c8} app=3867:com.meitu.meiyancamera:pushservice/u0a91 pid=3867 uid=10091 user=0 Filter #0: BroadcastFilter{66045d50} Action: "android.net.conn.CONNECTIVITY_CHANGE"
之后列出的是位于前臺(tái)的歷史廣播, 格式如下:
Historical broadcasts [foreground]: Historical Broadcast foreground #0: BroadcastRecord{65610478 u-1 android.intent.action.TIME_TICK} to user -1 Intent { act=android.intent.action.TIME_TICK flg=0x50000014 (has extras) } extras: Bundle[{android.intent.extra.ALARM_COUNT=1}] caller=android null pid=-1 uid=1000 dispatchClockTime=Tue Oct 07 10:53:00 GMT+08:00 2014 dispatchTime=-14s534ms finishTime=-14s436ms resultTo=null resultCode=0 resultData=null resultAbort=false ordered=true sticky=false initialSticky=false nextReceiver=10 receiver=null Receiver #0: BroadcastFilter{6568af00 u0 ReceiverList{65692db8 748 system/1000/u0 local:65b2a730}} Receiver #1: BroadcastFilter{660c8768 u0 ReceiverList{660c81a8 857 com.android.systemui/10012/u0 remote:660c78c0}} Receiver #2: BroadcastFilter{65d2d230 u0 ReceiverList{65d2cb20 857 com.android.systemui/10012/u0 remote:65a8bb70}} Receiver #3: BroadcastFilter{65f042e8 u0 ReceiverList{65f04d90 857 com.android.systemui/10012/u0 remote:65f9f2c0}} Receiver #4: BroadcastFilter{65a9d5f0 u0 ReceiverList{65affbc8 857 com.android.systemui/10012/u0 remote:65b41d50}} Receiver #5: BroadcastFilter{6682be08 u0 ReceiverList{6682bda8 857 com.android.systemui/10012/u0 remote:665c2478}} Receiver #6: BroadcastFilter{667a6c48 u0 ReceiverList{6671f128 857 com.android.systemui/10012/u0 remote:662c4048}} Receiver #7: BroadcastFilter{66901318 u0 ReceiverList{66949870 11260 com.youku.phone:MMS/10080/u0 remote:6695e528}} Receiver #8: BroadcastFilter{663a4b60 u0 ReceiverList{663a5148 857 com.android.systemui/10012/u0 remote:663c3530}} Receiver #9: BroadcastFilter{6633df98 u0 ReceiverList{6633f628 857 com.android.systemui/10012/u0 remote:66370860}}
然后是位于后臺(tái)的歷史廣播,格式如下:
Historical broadcasts [background]: Historical Broadcast background #0: BroadcastRecord{66430db0 u0 cn.etouch.ecalendar_CN.ETOUCH.ECALENDAR.WEATHER_HAS_UPDATE} to user 0 Intent { act=cn.etouch.ecalendar_CN.ETOUCH.ECALENDAR.WEATHER_HAS_UPDATE flg=0x10 (has extras) } extras: Bundle[mParcelledData.dataSize=44] caller=cn.etouch.ecalendar 3036:cn.etouch.ecalendar:remote/u0a140 pid=3036 uid=10140 dispatchClockTime=Tue Oct 07 10:53:00 GMT+08:00 2014 dispatchTime=-14s475ms finishTime=-14s400ms resultTo=null resultCode=0 resultData=null nextReceiver=5 receiver=null Receiver #0: ResolveInfo{66335e40 cn.etouch.ecalendar/.widget.myWidget_weather p=1000 m=0x108000} priority=1000 preferredOrder=0 match=0x108000 specificIndex=-1 isDefault=false ActivityInfo: name=cn.etouch.ecalendar.widget.myWidget_weather packageName=cn.etouch.ecalendar labelRes=0x7f06016c nonLocalizedLabel=null icon=0x0 enabled=true exported=true processName=cn.etouch.ecalendar taskAffinity=cn.etouch.ecalendar targetActivity=null ApplicationInfo: packageName=cn.etouch.ecalendar labelRes=0x7f060042 nonLocalizedLabel=null icon=0x7f0200c5 className=cn.etouch.ecalendar.common.ApplicationManager processName=cn.etouch.ecalendar taskAffinity=cn.etouch.ecalendar uid=10140 flags=0x88be44 theme=0x7f0a0029 requiresSmallestWidthDp=0 compatibleWidthLimitDp=0 largestWidthLimitDp=0 sourceDir=/data/app/cn.etouch.ecalendar-1.apk seinfo=default dataDir=/data/data/cn.etouch.ecalendar enabled=true targetSdkVersion=11 supportsRtl=false
下面是provider相關(guān)的信息, 格式如下:
------------------------------------------------------------------------------- ACTIVITY MANAGER CONTENT PROVIDERS (dumpsys activity providers) Published single-user content providers (by class): * ContentProviderRecord{65cd5f60 u0 com.redbend.vdmc/com.redbend.others.NodeProvider} package=com.redbend.vdmc process=com.redbend.vdmc proc=ProcessRecord{65d540d8 1018:com.redbend.vdmc/1001} uid=1001 provider=android.content.ContentProviderProxy@658b6690 singleton=true authority=com.lge.node * ContentProviderRecord{65d1b150 u0 com.android.phone/.IccProvider} package=com.android.phone process=com.android.phone proc=ProcessRecord{65fe2488 1000:com.android.phone/1001} uid=1001 provider=android.content.ContentProviderProxy@660cbf38 singleton=true authority=icc isSyncable=false multiprocess=true initOrder=0
直接在命令行鍵入dumpsys activity providers,可以直接得到provider相關(guān)的信息。由輸出信息可知, 在AtivityManagerService中,一個(gè)provider組件使用一個(gè)ContentProviderRecord對(duì)象表示。
服務(wù)(Service)相關(guān)的信息如下:
------------------------------------------------------------------------------- ACTIVITY MANAGER SERVICES (dumpsys activity services) User 0 active services: * ServiceRecord{660da0f0 u0 com.android.bluetooth/.hid.HidService} intent={act=android.bluetooth.IBluetoothInputDevice cmp=com.android.bluetooth/.hid.HidService} packageName=com.android.bluetooth processName=com.android.bluetooth baseDir=/system/app/Bluetooth.apk dataDir=/data/data/com.android.bluetooth app=null createTime=-1d16h37m16s523ms startingBgTimeout=-- lastActivity=-17h30m54s385ms restartTime=-- createdFromFg=false Bindings: * IntentBindRecord{660da3e0}: intent={act=android.bluetooth.IBluetoothInputDevice cmp=com.android.bluetooth/.hid.HidService} binder=null requested=false received=false hasBound=false doRebind=false
在shell中直接鍵入dumpsys activity services命令, 可以直接得到Service信息。
Activity相關(guān)的信息格式如下:
------------------------------------------------------------------------------- ACTIVITY MANAGER ACTIVITIES (dumpsys activity activities) Stack #0: Task id #1 * TaskRecord{65cc6860 #1 A=com.google.android.googlequicksearchbox U=0 sz=1} numActivities=1 rootWasReset=true userId=0 mTaskType=1 numFullscreen=1 mOnTopOfHome=true affinity=com.google.android.googlequicksearchbox intent={act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10600000 cmp=com.google.android.googlequicksearchbox/com.google.android.launcher.GEL} realActivity=com.google.android.googlequicksearchbox/com.google.android.launcher.GEL Activities=[ActivityRecord{66020ee8 u0 com.google.android.googlequicksearchbox/com.google.android.launcher.GEL t1}] askedCompatMode=false lastThumbnail=android.graphics.Bitmap@6653bf90 lastDescription=null lastActiveTime=144235207 (inactive for 1424s) * Hist #0: ActivityRecord{66020ee8 u0 com.google.android.googlequicksearchbox/com.google.android.launcher.GEL t1} packageName=com.google.android.googlequicksearchbox processName=com.google.android.googlequicksearchbox launchedFromUid=0 launchedFromPackage=null userId=0 app=ProcessRecord{66105ac8 1058:com.google.android.googlequicksearchbox/u0a19} Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000000 cmp=com.google.android.googlequicksearchbox/com.google.android.launcher.GEL } frontOfTask=true task=TaskRecord{65cc6860 #1 A=com.google.android.googlequicksearchbox U=0 sz=1} taskAffinity=com.google.android.googlequicksearchbox realActivity=com.google.android.googlequicksearchbox/com.google.android.launcher.GEL baseDir=/system/priv-app/Velvet.apk dataDir=/data/user/0/com.google.android.googlequicksearchbox stateNotNeeded=true componentSpecified=false mActivityType=1 compat={480dpi} labelRes=0x7f0a04c5 icon=0x7f030002 theme=0x7f0e000d config={1.0 460mcc1mnc zh_CN ldltr sw360dp w360dp h667dp 480dpi nrml port finger -keyb/v/h -nav/h s.11} launchFailed=false launchCount=0 lastLaunchTime=-17h30m56s529ms haveState=true icicle=Bundle[mParcelledData.dataSize=12720] state=STOPPED stopped=true delayedResume=false finishing=false keysPaused=false inHistory=true visible=false sleeping=true idle=true fullscreen=true noDisplay=false immersive=false launchMode=2 frozenBeforeDestroy=false thumbnailNeeded=false forceNewConfig=false mActivityType=HOME_ACTIVITY_TYPE thumbHolder: 65cc6860 bm=android.graphics.Bitmap@6653bf90 desc=null waitingVisible=false nowVisible=false lastVisibleTime=-21m53s598ms Task id #24 * TaskRecord{667de460 #24 A=com.android.systemui U=0 sz=1} numActivities=1 rootWasReset=false userId=0 mTaskType=2 numFullscreen=1 mOnTopOfHome=true affinity=com.android.systemui intent={act=com.android.systemui.recent.action.TOGGLE_RECENTS flg=0x10c00000 cmp=com.android.systemui/.recent.RecentsActivity} realActivity=com.android.systemui/.recent.RecentsActivity Activities=[ActivityRecord{6561e970 u0 com.android.systemui/.recent.RecentsActivity t24}] askedCompatMode=false lastThumbnail=android.graphics.Bitmap@662b3118 lastDescription=null lastActiveTime=87755110 (inactive for 57904s) * Hist #0: ActivityRecord{6561e970 u0 com.android.systemui/.recent.RecentsActivity t24} packageName=com.android.systemui processName=com.android.systemui launchedFromUid=10012 launchedFromPackage=com.android.systemui userId=0 app=ProcessRecord{6602d698 857:com.android.systemui/u0a12} Intent { act=com.android.systemui.recent.action.TOGGLE_RECENTS flg=0x10800000 cmp=com.android.systemui/.recent.RecentsActivity } frontOfTask=true task=TaskRecord{667de460 #24 A=com.android.systemui U=0 sz=1} taskAffinity=com.android.systemui realActivity=com.android.systemui/.recent.RecentsActivity baseDir=/system/priv-app/SystemUI.apk dataDir=/data/data/com.android.systemui stateNotNeeded=false componentSpecified=true mActivityType=2 compat={480dpi} labelRes=0x7f0a0080 icon=0x10804a5 theme=0x7f0e0000 config={1.0 460mcc1mnc zh_CN ldltr sw360dp w360dp h667dp 480dpi nrml port finger -keyb/v/h -nav/h s.9} launchFailed=false launchCount=0 lastLaunchTime=-9h69m21s658ms haveState=true icicle=Bundle[mParcelledData.dataSize=44] state=STOPPED stopped=true delayedResume=false finishing=false keysPaused=false inHistory=true visible=false sleeping=true idle=true fullscreen=true noDisplay=false immersive=false launchMode=3 frozenBeforeDestroy=false thumbnailNeeded=false forceNewConfig=false mActivityType=RECENTS_ACTIVITY_TYPE thumbHolder: 667de460 bm=android.graphics.Bitmap@662b3118 desc=null waitingVisible=false nowVisible=false lastVisibleTime=-7h8m31s600ms Running activities (most recent first): TaskRecord{65cc6860 #1 A=com.google.android.googlequicksearchbox U=0 sz=1} Run #1: ActivityRecord{66020ee8 u0 com.google.android.googlequicksearchbox/com.google.android.launcher.GEL t1} TaskRecord{667de460 #24 A=com.android.systemui U=0 sz=1} Run #0: ActivityRecord{6561e970 u0 com.android.systemui/.recent.RecentsActivity t24} mLastPausedActivity: ActivityRecord{66020ee8 u0 com.google.android.googlequicksearchbox/com.google.android.launcher.GEL t1}
在shell中直接鍵入dumpsys activity activities, 可以直接得到activity的相關(guān)信息。
和其他組件相比, Activity的管理比較特殊。 Activity是以棧的形式管理的, 每個(gè)棧中存在若干個(gè)任務(wù)(task), 每個(gè)任務(wù)又由若干個(gè)Activity組成。
看完上述內(nèi)容,你們對(duì)dumpsys命令怎么在Android項(xiàng)目中使用有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。