دامپسیس

dumpsys ابزاری است که بر روی دستگاه های اندرویدی اجرا می شود و اطلاعاتی در مورد خدمات سیستم ارائه می دهد. با استفاده از Android Debug Bridge (ADB) از خط فرمان dumpsys برای دریافت خروجی تشخیصی برای همه سرویس‌های سیستمی که روی دستگاه متصل اجرا می‌شوند، تماس بگیرید.

این خروجی معمولاً بیشتر از آنچه می‌خواهید پرمخاطب است، بنابراین از گزینه‌های خط فرمان در این صفحه برای دریافت خروجی فقط برای سرویس‌های سیستمی مورد نظر خود استفاده کنید. این صفحه همچنین نحوه استفاده از dumpsys را برای انجام کارهای رایج، مانند بازرسی ورودی، رم، باتری یا عیب‌یابی شبکه شرح می‌دهد.

نحو

نحو کلی برای استفاده از dumpsys به شرح زیر است:

 adb shell dumpsys [-t timeout] [--help | -l | --skip services | service [arguments] | -c | -h]

برای دریافت یک خروجی تشخیصی برای همه خدمات سیستم برای دستگاه متصل خود، adb shell dumpsys را اجرا کنید. با این حال، این اطلاعات بسیار بیشتر از آنچه که معمولاً می خواهید، خروجی می دهد. برای خروجی قابل مدیریت بیشتر، سرویسی را که می خواهید بررسی کنید با قرار دادن آن در دستور مشخص کنید. به عنوان مثال، دستور زیر داده های سیستم را برای اجزای ورودی، مانند صفحه نمایش لمسی یا صفحه کلید داخلی ارائه می دهد:

adb shell dumpsys input

برای لیست کاملی از خدمات سیستمی که می توانید با dumpsys استفاده کنید، از دستور زیر استفاده کنید:

adb shell dumpsys -l

گزینه های خط فرمان

جدول زیر گزینه های موجود هنگام استفاده از dumpsys را فهرست می کند:

جدول 1. فهرست گزینه های موجود برای dumpsys

گزینه توضیحات
-t timeout مدت زمان وقفه را بر حسب ثانیه مشخص کنید. وقتی مشخص نیست، مقدار پیش فرض 10 ثانیه است.
--help متن راهنما را برای ابزار dumpsys چاپ کنید.
-l لیست کاملی از خدمات سیستمی را که می توانید با dumpsys استفاده کنید، تهیه کنید.
--skip services services را که نمی خواهید در خروجی قرار دهید را مشخص کنید.
service [ arguments ] service را که می خواهید خروجی بگیرید مشخص کنید. برخی از سرویس ها ممکن است به شما اجازه دهند arguments اختیاری را ارسال کنید. برای آشنایی با این آرگومان های اختیاری، گزینه -h را با سرویس ارسال کنید:
adb shell dumpsys procstats -h
    
-c هنگام تعیین سرویس‌های خاص، این گزینه را برای خروجی داده‌ها در قالبی مناسب برای ماشین اضافه کنید.
-h برای برخی از سرویس‌ها، این گزینه را اضافه کنید تا متن راهنما و گزینه‌های اضافی برای آن سرویس را ببینید.

تشخیص ورودی را بررسی کنید

تعیین سرویس input ، همانطور که در دستور زیر نشان داده شده است، وضعیت دستگاه های ورودی سیستم مانند صفحه کلید و صفحه لمسی و پردازش رویدادهای ورودی را تخلیه می کند.

adb shell dumpsys input

خروجی بسته به نسخه اندرویدی که روی دستگاه متصل اجرا می شود متفاوت است. بخش‌های زیر نوع اطلاعاتی را که معمولاً می‌بینید شرح می‌دهند.

وضعیت مرکز رویداد

در زیر نمونه‌ای از آنچه ممکن است هنگام بازرسی وضعیت مرکز رویداد عیب‌یابی ورودی مشاهده کنید، آمده است:

INPUT MANAGER (dumpsys input)

Event Hub State:
  BuiltInKeyboardId: -2
  Devices:
    -1: Virtual
      Classes: 0x40000023
      Path: 
      Descriptor: a718a782d34bc767f4689c232d64d527998ea7fd
      Location:
      ControllerNumber: 0
      UniqueId: 
      Identifier: bus=0x0000, vendor=0x0000, product=0x0000, version=0x0000
      KeyLayoutFile: /system/usr/keylayout/Generic.kl
      KeyCharacterMapFile: /system/usr/keychars/Virtual.kcm
      ConfigurationFile:
      HaveKeyboardLayoutOverlay: false
    1: msm8974-taiko-mtp-snd-card Headset Jack
      Classes: 0x00000080
      Path: /dev/input/event5
      Descriptor: c8e3782483b4837ead6602e20483c46ff801112c
      Location: ALSA
      ControllerNumber: 0
      UniqueId:
      Identifier: bus=0x0000, vendor=0x0000, product=0x0000, version=0x0000
      KeyLayoutFile:
      KeyCharacterMapFile:
      ConfigurationFile:
      HaveKeyboardLayoutOverlay: false
    2: msm8974-taiko-mtp-snd-card Button Jack
      Classes: 0x00000001
      Path: /dev/input/event4
      Descriptor: 96fe62b244c555351ec576b282232e787fb42bab
      Location: ALSA
      ControllerNumber: 0
      UniqueId:
      Identifier: bus=0x0000, vendor=0x0000, product=0x0000, version=0x0000
      KeyLayoutFile: /system/usr/keylayout/msm8974-taiko-mtp-snd-card_Button_Jack.kl
      KeyCharacterMapFile: /system/usr/keychars/msm8974-taiko-mtp-snd-card_Button_Jack.kcm
      ConfigurationFile:
      HaveKeyboardLayoutOverlay: false
    3: hs_detect
      Classes: 0x00000081
      Path: /dev/input/event3
      Descriptor: 485d69228e24f5e46da1598745890b214130dbc4
      Location:
      ControllerNumber: 0
      UniqueId:
      Identifier: bus=0x0000, vendor=0x0001, product=0x0001, version=0x0001
      KeyLayoutFile: /system/usr/keylayout/hs_detect.kl
      KeyCharacterMapFile: /system/usr/keychars/hs_detect.kcm
      ConfigurationFile:
      HaveKeyboardLayoutOverlay: false
...

وضعیت خواننده ورودی

InputReader مسئول رمزگشایی رویدادهای ورودی از هسته است. حالت تخلیه اطلاعاتی در مورد نحوه پیکربندی هر دستگاه ورودی و تغییرات وضعیت اخیر رخ داده مانند فشار دادن کلید یا لمس صفحه لمسی را نشان می دهد.

نمونه زیر خروجی یک صفحه نمایش لمسی را نشان می دهد. به اطلاعات مربوط به وضوح دستگاه و پارامترهای کالیبراسیون استفاده شده توجه کنید.

Input Reader State
...
  Device 6: Melfas MMSxxx Touchscreen
      IsExternal: false
      Sources: 0x00001002
      KeyboardType: 0
      Motion Ranges:
        X: source=0x00001002, min=0.000, max=719.001, flat=0.000, fuzz=0.999
        Y: source=0x00001002, min=0.000, max=1279.001, flat=0.000, fuzz=0.999
        PRESSURE: source=0x00001002, min=0.000, max=1.000, flat=0.000, fuzz=0.000
        SIZE: source=0x00001002, min=0.000, max=1.000, flat=0.000, fuzz=0.000
        TOUCH_MAJOR: source=0x00001002, min=0.000, max=1468.605, flat=0.000, fuzz=0.000
        TOUCH_MINOR: source=0x00001002, min=0.000, max=1468.605, flat=0.000, fuzz=0.000
        TOOL_MAJOR: source=0x00001002, min=0.000, max=1468.605, flat=0.000, fuzz=0.000
        TOOL_MINOR: source=0x00001002, min=0.000, max=1468.605, flat=0.000, fuzz=0.000
      Touch Input Mapper:
        Parameters:
          GestureMode: spots
          DeviceType: touchScreen
          AssociatedDisplay: id=0, isExternal=false
          OrientationAware: true
        Raw Touch Axes:
          X: min=0, max=720, flat=0, fuzz=0, resolution=0
          Y: min=0, max=1280, flat=0, fuzz=0, resolution=0
          Pressure: min=0, max=255, flat=0, fuzz=0, resolution=0
          TouchMajor: min=0, max=30, flat=0, fuzz=0, resolution=0
          TouchMinor: unknown range
          ToolMajor: unknown range
          ToolMinor: unknown range
          Orientation: unknown range
          Distance: unknown range
          TiltX: unknown range
          TiltY: unknown range
          TrackingId: min=0, max=65535, flat=0, fuzz=0, resolution=0
          Slot: min=0, max=9, flat=0, fuzz=0, resolution=0
        Calibration:
          touch.size.calibration: diameter
          touch.size.scale: 10.000
          touch.size.bias: 0.000
          touch.size.isSummed: false
          touch.pressure.calibration: amplitude
          touch.pressure.scale: 0.005
          touch.orientation.calibration: none
          touch.distance.calibration: none
        SurfaceWidth: 720px
        SurfaceHeight: 1280px
        SurfaceOrientation: 0
        Translation and Scaling Factors:
          XScale: 0.999
          YScale: 0.999
          XPrecision: 1.001
          YPrecision: 1.001
          GeometricScale: 0.999
          PressureScale: 0.005
          SizeScale: 0.033
          OrientationCenter: 0.000
          OrientationScale: 0.000
          DistanceScale: 0.000
          HaveTilt: false
          TiltXCenter: 0.000
          TiltXScale: 0.000
          TiltYCenter: 0.000
          TiltYScale: 0.000
        Last Button State: 0x00000000
        Last Raw Touch: pointerCount=0
        Last Cooked Touch: pointerCount=0

در انتهای حالت تخلیه خواننده ورودی، اطلاعاتی در مورد پارامترهای پیکربندی کلی وجود دارد، مانند فاصله ضربه زدن:

Configuration:
  ExcludedDeviceNames: []
  VirtualKeyQuietTime: 0.0ms
  PointerVelocityControlParameters: scale=1.000, lowThreshold=500.000, highThreshold=3000.000, acceleration=3.000
  WheelVelocityControlParameters: scale=1.000, lowThreshold=15.000, highThreshold=50.000, acceleration=4.000
  PointerGesture:
    Enabled: true
    QuietInterval: 100.0ms
    DragMinSwitchSpeed: 50.0px/s
    TapInterval: 150.0ms
    TapDragInterval: 300.0ms
    TapSlop: 20.0px
    MultitouchSettleInterval: 100.0ms
    MultitouchMinDistance: 15.0px
    SwipeTransitionAngleCosine: 0.3
    SwipeMaxWidthRatio: 0.2
    MovementSpeedRatio: 0.8
    ZoomSpeedRatio: 0.3

وضعیت توزیع کننده ورودی

InputDispatcher مسئول ارسال رویدادهای ورودی به برنامه ها است. همانطور که در خروجی نمونه زیر نشان داده شده است، حالت dump آن اطلاعاتی را در مورد اینکه کدام پنجره لمس می شود، وضعیت صف ورودی، اینکه آیا ANR در حال انجام است و سایر اطلاعات رویداد ورودی را نشان می دهد:

Input Dispatcher State:
  DispatchEnabled: 1
  DispatchFrozen: 0
  FocusedApplication: <null>
  FocusedWindow: name='Window{3fb06dc3 u0 StatusBar}'
  TouchStates: <no displays touched>
  Windows:
    0: name='Window{357bbbfe u0 SearchPanel}', displayId=0, paused=false, hasFocus=false, hasWallpaper=false, visible=false, canReceiveKeys=false, flags=0x01820100, type=0x000007e8, layer=211000, frame=[0,0][1080,1920], scale=1.000000, touchableRegion=[0,0][1080,1920], inputFeatures=0x00000000, ownerPid=22674, ownerUid=10020, dispatchingTimeout=5000.000ms
    1: name='Window{3b14c0ca u0 NavigationBar}', displayId=0, paused=false, hasFocus=false, hasWallpaper=false, visible=false, canReceiveKeys=false, flags=0x01840068, type=0x000007e3, layer=201000, frame=[0,1776][1080,1920], scale=1.000000, touchableRegion=[0,1776][1080,1920], inputFeatures=0x00000000, ownerPid=22674, ownerUid=10020, dispatchingTimeout=5000.000ms
    2: name='Window{2c7e849c u0 com.vito.lux}', displayId=0, paused=false, hasFocus=false, hasWallpaper=false, visible=true, canReceiveKeys=false, flags=0x0089031a, type=0x000007d6, layer=191000, frame=[-495,-147][1575,1923], scale=1.000000, touchableRegion=[-495,-147][1575,1923], inputFeatures=0x00000000, ownerPid=4697, ownerUid=10084, dispatchingTimeout=5000.000ms
    ...
  MonitoringChannels:
    0: 'WindowManager (server)'
  RecentQueue: length=10
    MotionEvent(deviceId=4, source=0x00001002, action=2, flags=0x00000000, metaState=0x00000000, buttonState=0x00000000, edgeFlags=0x00000000, xPrecision=1.0, yPrecision=1.0, displayId=0, pointers=[0: (335.0, 1465.0)]), policyFlags=0x62000000, age=217264.0ms
    MotionEvent(deviceId=4, source=0x00001002, action=1, flags=0x00000000, metaState=0x00000000, buttonState=0x00000000, edgeFlags=0x00000000, xPrecision=1.0, yPrecision=1.0, displayId=0, pointers=[0: (335.0, 1465.0)]), policyFlags=0x62000000, age=217255.7ms
    MotionEvent(deviceId=4, source=0x00001002, action=0, flags=0x00000000, metaState=0x00000000, buttonState=0x00000000, edgeFlags=0x00000000, xPrecision=1.0, yPrecision=1.0, displayId=0, pointers=[0: (330.0, 1283.0)]), policyFlags=0x62000000, age=216805.0ms
    ...
  PendingEvent: <none>
  InboundQueue: <empty>
  ReplacedKeys: <empty>
  Connections:
    0: channelName='WindowManager (server)', windowName='monitor', status=NORMAL, monitor=true, inputPublisherBlocked=false
      OutboundQueue: <empty>
      WaitQueue: <empty>
    1: channelName='278c1d65 KeyguardScrim (server)', windowName='Window{278c1d65 u0 KeyguardScrim}', status=NORMAL, monitor=false, inputPublisherBlocked=false
      OutboundQueue: <empty>
      WaitQueue: <empty>
    2: channelName='357bbbfe SearchPanel (server)', windowName='Window{357bbbfe u0 SearchPanel}', status=NORMAL, monitor=false, inputPublisherBlocked=false
      OutboundQueue: <empty>
      WaitQueue: <empty>
    ...
  AppSwitch: not pending
    7: channelName='2280455f com.google.android.gm/com.google.android.gm.ConversationListActivityGmail (server)', windowName='Window{2280455f u0 com.google.android.gm/com.google.android.gm.ConversationListActivityGmail}', status=NORMAL, monitor=false, inputPublisherBlocked=false
      OutboundQueue: <empty>
      WaitQueue: <empty>
    8: channelName='1a7be08a com.android.systemui/com.android.systemui.recents.RecentsActivity (server)', windowName='Window{1a7be08a u0 com.android.systemui/com.android.systemui.recents.RecentsActivity EXITING}', status=NORMAL, monitor=false, inputPublisherBlocked=false
      OutboundQueue: <empty>
      WaitQueue: <empty>
    9: channelName='3b14c0ca NavigationBar (server)', windowName='Window{3b14c0ca u0 NavigationBar}', status=NORMAL, monitor=false, inputPublisherBlocked=false
      OutboundQueue: <empty>
      WaitQueue: <empty>
    ...
  Configuration:
    KeyRepeatDelay: 50.0ms
    KeyRepeatTimeout: 500.0ms

چیزهایی که باید بررسی شود

در زیر لیستی از مواردی است که باید هنگام بازرسی خروجی سرویس input در نظر بگیرید:

وضعیت مرکز رویداد:

  • تمام دستگاه های ورودی مورد انتظار شما وجود دارد.
  • هر دستگاه ورودی دارای یک فایل طرح بندی کلید مناسب، فایل نقشه کاراکتر کلید و فایل پیکربندی دستگاه ورودی است. اگر فایل ها گم شده باشند یا دارای خطاهای نحوی باشند، بارگذاری نمی شوند.
  • هر دستگاه ورودی به درستی طبقه بندی شده است. بیت های فیلد Classes با پرچم هایی در EventHub.h مانند INPUT_DEVICE_CLASS_TOUCH_MT مطابقت دارند.
  • BuiltInKeyboardId درست است. اگر دستگاه دارای صفحه کلید داخلی نباشد، شناسه باید -2 باشد. در غیر این صورت، باید شناسه صفحه کلید داخلی باشد.
    • اگر مشاهده کردید که BuiltInKeyboardId -2 نیست اما باید باشد، یک فایل نقشه کاراکتر کلیدی برای یک صفحه کلید عملکرد خاص را از دست داده اید. دستگاه‌های صفحه‌کلید عملکرد ویژه باید فایل‌های نقشه نویسه‌های کلیدی داشته باشند که فقط حاوی type SPECIAL_FUNCTION باشند.

وضعیت خواننده ورودی:

  • همه دستگاه های ورودی مورد انتظار وجود دارند.
  • هر دستگاه ورودی به درستی پیکربندی شده است. به ویژه بررسی کنید که صفحه لمسی و محورهای جوی استیک درست باشند.

وضعیت توزیع کننده ورودی:

  • همه رویدادهای ورودی همانطور که انتظار می رود پردازش می شوند.
  • پس از لمس صفحه لمسی و اجرای dumpsys به طور همزمان، خط TouchStates پنجره ای را که لمس می کنید به درستی شناسایی می کند.

تست عملکرد UI

مشخص کردن سرویس gfxinfo خروجی با اطلاعات عملکرد مربوط به فریم‌های انیمیشنی که در مرحله ضبط رخ می‌دهند، ارائه می‌کند. دستور زیر از gfxinfo برای جمع‌آوری داده‌های عملکرد رابط کاربری برای نام بسته مشخص شده استفاده می‌کند:

adb shell dumpsys gfxinfo package-name

همچنین می‌توانید گزینه framestats را برای ارائه اطلاعات دقیق‌تر زمان‌بندی فریم‌ها از فریم‌های اخیر در نظر بگیرید تا بتوانید مشکلات را با دقت بیشتری ردیابی و اشکال‌زدایی کنید:

adb shell dumpsys gfxinfo package-name framestats

برای کسب اطلاعات بیشتر در مورد استفاده از gfxinfo و framestats برای ادغام اندازه‌گیری‌های عملکرد رابط کاربری در روش‌های آزمایشی، به نوشتن یک Macrobenchmark مراجعه کنید.

عیب یابی شبکه را بررسی کنید

مشخص کردن سرویس netstats آمار استفاده از شبکه را ارائه می دهد که از زمان راه اندازی دستگاه قبلی جمع آوری شده است. برای خروجی اطلاعات اضافی، مانند اطلاعات دقیق شناسه کاربری منحصر به فرد (UID)، گزینه detail را به شرح زیر اضافه کنید:

adb shell dumpsys netstats detail

خروجی بسته به نسخه اندرویدی که روی دستگاه متصل اجرا می شود متفاوت است. بخش‌های زیر نوع اطلاعاتی را که معمولاً می‌بینید شرح می‌دهند.

رابط های فعال و رابط های UID فعال

خروجی نمونه زیر، رابط های فعال و رابط های UID فعال دستگاه متصل را فهرست می کند. در بیشتر موارد، اطلاعات رابط های فعال و رابط های فعال UID یکسان است.

Active interfaces:
  iface=wlan0 ident=[{type=WIFI, subType=COMBINED, networkId="Guest"}]
Active UID interfaces:
  iface=wlan0 ident=[{type=WIFI, subType=COMBINED, networkId="Guest"}]

آمار 'Dev' و 'Xt'

نمونه زیر یک خروجی برای بخش آمار توسعه دهندگان است:

Dev stats:
  Pending bytes: 1798112
  History since boot:
  ident=[{type=WIFI, subType=COMBINED, networkId="Guest", metered=false}] uid=-1 set=ALL tag=0x0
    NetworkStatsHistory: bucketDuration=3600
      st=1497891600 rb=1220280 rp=1573 tb=309870 tp=1271 op=0
      st=1497895200 rb=29733 rp=145 tb=85354 tp=185 op=0
      st=1497898800 rb=46784 rp=162 tb=42531 tp=192 op=0
      st=1497902400 rb=27570 rp=111 tb=35990 tp=121 op=0
Xt stats:
  Pending bytes: 1771782
  History since boot:
  ident=[{type=WIFI, subType=COMBINED, networkId="Guest", metered=false}] uid=-1 set=ALL tag=0x0
    NetworkStatsHistory: bucketDuration=3600
      st=1497891600 rb=1219598 rp=1557 tb=291628 tp=1255 op=0
      st=1497895200 rb=29623 rp=142 tb=82699 tp=182 op=0
      st=1497898800 rb=46684 rp=160 tb=39756 tp=191 op=0
      st=1497902400 rb=27528 rp=110 tb=34266 tp=120 op=0

آمار UID

در زیر نمونه ای از آمار دقیق برای هر UID آمده است:

UID stats:
  Pending bytes: 744
  Complete history:
  ident=[[type=MOBILE_SUPL, subType=COMBINED, subscriberId=311111...], [type=MOBILE, subType=COMBINED, subscriberId=311111...]] uid=10007  set=DEFAULT tag=0x0
    NetworkStatsHistory: bucketDuration=7200000
      bucketStart=1406167200000 activeTime=7200000 rxBytes=4666 rxPackets=7 txBytes=1597 txPackets=10 operations=0
  ident=[[type=WIFI, subType=COMBINED, networkId="MySSID"]] uid=10007  set=DEFAULT tag=0x0
    NetworkStatsHistory: bucketDuration=7200000
      bucketStart=1406138400000 activeTime=7200000 rxBytes=17086802 rxPackets=15387 txBytes=1214969 txPackets=8036 operations=28
      bucketStart=1406145600000 activeTime=7200000 rxBytes=2396424 rxPackets=2946 txBytes=464372 txPackets=2609 operations=70
      bucketStart=1406152800000 activeTime=7200000 rxBytes=200907 rxPackets=606 txBytes=187418 txPackets=739 operations=0
      bucketStart=1406160000000 activeTime=7200000 rxBytes=826017 rxPackets=1126 txBytes=267342 txPackets=1175 operations=35

برای پیدا کردن UID برای برنامه خود، این دستور را اجرا کنید: adb shell dumpsys package your-package-name . سپس به دنبال خط با برچسب userId بگردید.

به عنوان مثال، برای یافتن میزان استفاده از شبکه برای برنامه «com.example.myapp»، دستور زیر را اجرا کنید:

adb shell dumpsys package com.example.myapp | grep userId

خروجی باید مشابه موارد زیر باشد:

    userId=10007 gids=[3003, 1028, 1015]

با استفاده از dump نمونه قبلی، به دنبال خطوطی باشید که uid=10007 دارند. دو خط از این قبیل وجود دارد - اولی یک اتصال تلفن همراه و دومی نشان دهنده اتصال Wi-Fi است. در زیر هر خط، می توانید اطلاعات زیر را برای هر پنجره دو ساعته مشاهده کنید، که bucketDuration آن را بر حسب میلی ثانیه مشخص می کند:

  • set=DEFAULT استفاده از شبکه پیش زمینه را نشان می دهد، در حالی که set=BACKGROUND نشان دهنده استفاده از پس زمینه است. set=ALL بر هر دو دلالت دارد.
  • tag=0x0 نشان دهنده تگ سوکت مرتبط با ترافیک است.
  • rxBytes و rxPackets نشان دهنده بایت های دریافتی و بسته های دریافتی در بازه زمانی مربوطه هستند.
  • txBytes و txPackets نشان دهنده بایت های ارسال شده (ارسال شده) و بسته های ارسال شده در بازه زمانی مربوطه هستند.

عیب یابی باتری را بررسی کنید

مشخص کردن سرویس batterystats داده‌های آماری در مورد استفاده از باتری در دستگاه تولید می‌کند که با شناسه کاربر منحصر به فرد (UID) سازماندهی شده است. برای یادگیری نحوه استفاده از dumpsys برای آزمایش برنامه خود برای Doze و App Standby، به تست با Doze و App Standby مراجعه کنید.

دستور batterystats به شرح زیر است:

adb shell dumpsys batterystats options

برای مشاهده لیستی از گزینه های اضافی موجود برای batterystats ، گزینه -h را قرار دهید. مثال زیر آمار مصرف باتری را برای یک بسته برنامه مشخص از آخرین بار شارژ شدن دستگاه نشان می دهد:

adb shell dumpsys batterystats --charged package-name

خروجی معمولاً شامل موارد زیر است:

  • تاریخچه رویدادهای مرتبط با باتری
  • آمار جهانی دستگاه
  • مصرف تقریبی انرژی برای هر UID و جزء سیستم
  • میلی ثانیه در هر بسته تلفن همراه برای هر برنامه
  • آمار جمع آوری UID سیستم
  • آمار جمع آوری UID برنامه

برای کسب اطلاعات بیشتر در مورد استفاده از batterystats و ایجاد تصویرسازی HTML از خروجی، که درک و تشخیص مشکلات مربوط به باتری را آسان‌تر می‌کند، نمایه استفاده از باتری را با Batterystats و Battery Historian بخوانید.

خروجی ماشین پسند را بررسی کنید

با استفاده از دستور زیر می توانید خروجی batterystats در قالب CSV قابل خواندن توسط ماشین تولید کنید:

adb shell dumpsys batterystats --checkin

نمونه زیر نمونه ای از خروجی است:

9,0,i,vers,11,116,K,L
9,0,i,uid,1000,android
9,0,i,uid,1000,com.android.providers.settings
9,0,i,uid,1000,com.android.inputdevices
9,0,i,uid,1000,com.android.server.telecom
...
9,0,i,dsd,1820451,97,s-,p-
9,0,i,dsd,3517481,98,s-,p-
9,0,l,bt,0,8548446,1000983,8566645,1019182,1418672206045,8541652,994188
9,0,l,gn,0,0,666932,495312,0,0,2104,1444
9,0,l,m,6794,0,8548446,8548446,0,0,0,666932,495312,0,697728,0,0,0,5797,0,0
...

مشاهدات مصرف باتری ممکن است در UID یا سطح سیستم باشد. داده ها بر اساس سودمندی آن در تجزیه و تحلیل عملکرد باتری برای گنجاندن انتخاب می شوند. هر ردیف نشان دهنده یک مشاهده با عناصر زیر است:

  • یک عدد صحیح نگهدارنده مکان
  • شناسه کاربری مرتبط با مشاهده
  • حالت تجمع:
    • i برای اطلاعاتی که به وضعیت شارژ / شارژ نشده مرتبط نیست.
    • l برای --charged (استفاده از آخرین شارژ).
    • u برای --unplugged (استفاده از آخرین قطع برق). در اندروید 5.1.1 منسوخ شده است.
  • شناسه بخش، که نحوه تفسیر مقادیر بعدی در خط را تعیین می کند.

جدول زیر شناسه بخش های مختلفی را که ممکن است مشاهده کنید توضیح می دهد:

جدول 2. فهرست شناسه بخش ها

شناسه بخش توضیحات فیلدهای باقی مانده

vers

نسخه

checkin version ، parcel version ، start platform version ، end platform version

uid

UID

uid ، package name

apk

APK

wakeups ، APK ، service ، start time ، starts ، launches

pr

فرآیند

process ، user ، system ، foreground ، starts

sr

سنسور

sensor number ، time ، count

vib

ویبراتور

time ، count

fg

پیش زمینه

time ، count

st

زمان ایالت

foreground ، active ، running

wl

ویک لاک

wake lock , full time , f , full count , partial time , p , partial count , window time , w , window count

sy

همگام سازی

sync ، time ، count

jb

شغل

job ، time ، count

kwl

Kernel Wake Lock

kernel wake lock ، time ، count

wr

دلیل بیداری

wakeup reason ، time ، count

nt

شبکه

mobile bytes RX , mobile bytes TX , بایت های Wi-Fi bytes RX , بایت های Wi-Fi bytes TX , بسته mobile packets RX , mobile packets TX , Wi-Fi packets RX , Wi-Fi packets TX , mobile active time , mobile active count

ua

فعالیت کاربر

other ، button ، touch

bt

باتری

start count battery realtime ، battery uptime ، total realtime ، total uptime ، start clock time ، battery screen off realtime ، battery screen off uptime

dc

تخلیه باتری

low ، high ، screen on ، screen off

lv

سطح باتری

start level ، current level

wfl

وای فای

full Wi-Fi lock on time ، Wi-Fi scan time ، Wi-Fi running time ، Wi-Fi scan count Wi-Fi idle time ، Wi-Fi receive time ، Wi-Fi transmit time

gwfl

وای فای جهانی

Wi-Fi on time ، Wi-Fi running time ، Wi-Fi idle time ، Wi-Fi receive time ، Wi-Fi transmit time ، Wi-Fi power (mAh)

gble

بلوتوث جهانی

BT idle time ، BT receive time ، BT transmit time ، BT power (mAh)

m

متفرقه

screen on time ، phone on time ، full wakelock time total ، partial wakelock time total ، mobile radio active time ، mobile radio active adjusted time ، interactive time ، power save mode enabled time ، connectivity changes ، device idle mode enabled time ، device idle mode enabled count ، device idling time ، device idling count ، mobile radio active count ، mobile radio active unknown time

gn

شبکه جهانی

mobile RX total bytes ، mobile TX total bytes ، Wi-Fi RX total bytes ، کل بایت‌های Wi-Fi TX total bytes ، mobile RX total packets ، mobile TX total packets ، Wi-Fi RX total packets ، Wi-Fi TX total packets

br

روشنایی صفحه نمایش

dark ، dim ، medium ، light ، bright

sst

زمان اسکن سیگنال

signal scanning time

sgt

زمان قدرت سیگنال

none ، poor ، moderate ، good ، great

sgc

شمارش قدرت سیگنال

none ، poor ، moderate ، good ، great

dct

زمان اتصال داده

none , GPRS , EDGE , UMTS , CDMA , EVDO_0 , EVDO_A , 1xRTT , HSDPA , HSUPA , HSPA , IDEN , EVDO_B , LTE , EHRPD , HSPAP , other

dcc

تعداد اتصال داده

none , GPRS , EDGE , UMTS , CDMA , EVDO_0 , EVDO_A , 1xRTT , HSDPA , HSUPA , HSPA , IDEN , EVDO_B , LTE , EHRPD , HSPAP , other

wst

زمان وضعیت Wi-Fi

off ، off scanning ، on no networks ، on disconnected ، on connected STA ، on connected P2P ، on connected STA P2P ، soft AP

wsc

تعداد وضعیت Wi-Fi

off ، off scanning ، on no networks ، on disconnected ، on connected STA ، on connected P2P ، on connected STA P2P ، soft AP

wsst /p>

زمان حالت درخواست کننده Wi-Fi

invalid ، disconnected ، interface disabled ، inactive ، scanning ، authenticating ، associating ، associated ، four-way handshake ، group handshake ، completed ، dormant ، uninitialized

wssc

تعداد درخواست کننده Wi-Fi

invalid ، disconnected ، interface disabled ، inactive ، scanning ، authenticating ، associating ، associated ، four-way handshake ، group handshake ، completed ، dormant ، uninitialized

wsgt

زمان قدرت سیگنال Wi-Fi

none ، poor ، moderate ، good ، great

wsgc

شمارش قدرت سیگنال Wi-Fi

none ، poor ، moderate ، good ، great

bst

زمان وضعیت بلوتوث

inactive ، low ، med ، high

bsc

تعداد حالت بلوتوث

inactive ، low ، med ، high

pws

خلاصه استفاده از نیرو

battery capacity ، computed power ، minimum drained power ، maximum drained power

pwi

مورد مصرف برق

label ، mAh

dsd

مرحله تخلیه

duration ، level ، screen ، power-save

csd

مرحله شارژ

duration ، level ، screen ، power-save

dtr

زمان تخلیه باقی مانده است

battery time remaining

ctr

زمان شارژ باقی مانده است

charge time remaining

توجه : قبل از Android 6.0، مصرف برق برای رادیو بلوتوث، رادیو تلفن همراه و Wi-Fi در دسته m (متفرقه) ردیابی می‌شد. در اندروید 6.0 و بالاتر، مصرف برق برای این مؤلفه‌ها در بخش pwi (مورد مصرف انرژی) با برچسب‌های جداگانه ( wifi ، blue ، cell ) برای هر مؤلفه ردیابی می‌شود.

مشاهده تخصیص حافظه

می توانید میزان استفاده از حافظه برنامه خود را به یکی از دو روش بررسی کنید: در یک دوره زمانی با استفاده از procstats یا در یک نقطه خاص از زمان با استفاده از meminfo . بخش های زیر نحوه استفاده از هر دو روش را به شما نشان می دهد.

procstats

procstats این امکان را به شما می‌دهد که ببینید برنامه شما در طول زمان چگونه عمل می‌کند، از جمله مدت زمانی که در پس‌زمینه اجرا می‌شود و در این مدت چقدر حافظه مصرف می‌کند. این به شما کمک می کند تا به سرعت ناکارآمدی ها و رفتارهای نادرست را در برنامه خود پیدا کنید، مانند نشت حافظه، که می تواند بر عملکرد آن تأثیر بگذارد، به خصوص هنگام اجرا بر روی دستگاه های با حافظه کم. حالت dump آن آمار مربوط به زمان اجرا، اندازه مجموعه متناسب (PSS)، اندازه مجموعه منحصر به فرد (USS) و اندازه مجموعه مقیم (RSS) را نمایش می دهد.

برای دریافت آمار استفاده از حافظه برنامه در سه ساعت گذشته، در قالب قابل خواندن توسط انسان، دستور زیر را اجرا کنید:

adb shell dumpsys procstats --hours 3

همانطور که در مثال زیر نشان داده شده است، خروجی نشان می دهد که چند درصد از زمان اجرای برنامه و PSS، USS، و RSS به صورت minPSS-avgPSS-maxPSS/minUSS-avgUSS-maxUSS/minRSS-avgRSS-maxRSS بیش از تعداد نمونه ها.

AGGREGATED OVER LAST 3 HOURS:
  * com.android.systemui / u0a37 / v28:
           TOTAL: 100% (15MB-16MB-17MB/7.7MB-8.7MB-9.4MB/7.7MB-9.6MB-84MB over 178)
      Persistent: 100% (15MB-16MB-17MB/7.7MB-8.7MB-9.4MB/7.7MB-9.6MB-84MB over 178)
  * com.android.se / 1068 / v28:
           TOTAL: 100% (2.8MB-2.9MB-2.9MB/300KB-301KB-304KB/304KB-22MB-33MB over 3)
      Persistent: 100% (2.8MB-2.9MB-2.9MB/300KB-301KB-304KB/304KB-22MB-33MB over 3)
  * com.google.android.gms.persistent / u0a7 / v19056073:
           TOTAL: 100% (37MB-38MB-40MB/27MB-28MB-29MB/124MB-125MB-126MB over 2)
          Imp Fg: 100% (37MB-38MB-40MB/27MB-28MB-29MB/124MB-125MB-126MB over 2)
  ...
  * com.android.gallery3d / u0a62 / v40030:
           TOTAL: 0.01%
        Receiver: 0.01%
        (Cached): 54% (6.4MB-6.5MB-6.9MB/4.4MB-4.4MB-4.4MB/4.4MB-26MB-68MB over 6)
  * com.google.android.tvlauncher / u0a30 / v1010900130:
           TOTAL: 0.01%
        Receiver: 0.01%
        (Cached): 91% (5.8MB-13MB-14MB/3.5MB-10MB-12MB/12MB-33MB-78MB over 6)
  * com.android.vending:instant_app_installer / u0a16 / v81633968:
           TOTAL: 0.01%
        Receiver: 0.01%
        (Cached): 100% (14MB-15MB-16MB/3.8MB-4.2MB-5.1MB/3.8MB-30MB-95MB over 7)
  ...
Run time Stats:
  SOff/Norm: +32m52s226ms
  SOn /Norm: +2h10m8s364ms
       Mod : +17s930ms
      TOTAL: +2h43m18s520ms

Memory usage:
  Kernel : 265MB (38 samples)
  Native : 73MB (38 samples)
  Persist: 262MB (90 samples)
  Top    : 190MB (325 samples)
  ImpFg  : 204MB (569 samples)
  ImpBg  : 754KB (345 samples)
  Service: 93MB (1912 samples)
  Receivr: 227KB (1169 samples)
  Home   : 66MB (12 samples)
  LastAct: 30MB (255 samples)
  CchAct : 220MB (450 samples)
  CchCAct: 193MB (71 samples)
  CchEmty: 182MB (652 samples)
  Cached : 58MB (38 samples)
  Free   : 60MB (38 samples)
  TOTAL  : 1.9GB
  ServRst: 50KB (278 samples)

          Start time: 2015-04-08 13:44:18
  Total elapsed time: +2h43m18s521ms (partial) libart.so

meminfo

با دستور زیر می توانید یک عکس فوری از نحوه تقسیم حافظه برنامه خود بین انواع مختلف تخصیص RAM ضبط کنید:

adb shell dumpsys meminfo package_name|pid [-d]

پرچم -d اطلاعات بیشتری در رابطه با استفاده از حافظه Dalvik و ART چاپ می کند.

خروجی تمام تخصیص های فعلی برنامه شما را که بر حسب کیلوبایت اندازه گیری می شود، فهرست می کند.

هنگام بررسی این اطلاعات، باید با انواع تخصیص زیر آشنا باشید:

رم خصوصی (تمیز و کثیف).
این حافظه ای است که فقط توسط فرآیند شما استفاده می شود. این بخش عمده ای از RAM است که سیستم می تواند پس از از بین رفتن فرآیند برنامه شما آن را بازیابی کند. به طور کلی، مهم‌ترین بخش رم کثیف خصوصی است که گران‌ترین آن است زیرا فقط توسط پردازش شما استفاده می‌شود و به دلیل اینکه محتویات آن فقط در RAM وجود دارد، بنابراین نمی‌توان آن را به فضای ذخیره‌سازی صفحه کرد، زیرا اندروید از آن استفاده نمی‌کند. مبادله تمام تخصیص‌های Dalvik و Heap بومی که انجام می‌دهید RAM کثیف خصوصی هستند. Dalvik و تخصیص های بومی که با فرآیند Zygote به اشتراک می گذارید، RAM کثیف مشترک هستند.
اندازه مجموعه متناسب (PSS)
این اندازه‌گیری میزان استفاده از رم برنامه شما است که اشتراک‌گذاری صفحات در بین فرآیندها را در نظر می‌گیرد. هر صفحه RAM که منحصر به فرآیند شما باشد مستقیماً به مقدار PSS آن کمک می کند، در حالی که صفحاتی که با سایر فرآیندها به اشتراک گذاشته می شوند فقط به نسبت مقدار اشتراک گذاری به مقدار PSS کمک می کنند. به عنوان مثال، یک صفحه به اشتراک گذاشته شده بین دو فرآیند، نیمی از اندازه خود را به PSS هر فرآیند کمک می کند.

یکی از ویژگی های اندازه گیری PSS این است که می توانید PSS را در تمام فرآیندها جمع کنید تا حافظه واقعی مورد استفاده همه فرآیندها را تعیین کنید. این بدان معناست که PSS معیار خوبی برای وزن واقعی RAM یک فرآیند و برای مقایسه با استفاده از RAM سایر فرآیندها و کل RAM موجود است.

به عنوان مثال، خروجی فرآیند Map در دستگاه Nexus 5، زیر است:

adb shell dumpsys meminfo com.google.android.apps.maps -d

توجه: اطلاعاتی که مشاهده می کنید ممکن است کمی با آنچه در اینجا نشان داده شده است متفاوت باشد، زیرا برخی از جزئیات خروجی در نسخه های پلت فرم متفاوت است.

** MEMINFO in pid 18227 [com.google.android.apps.maps] **
                   Pss  Private  Private  Swapped     Heap     Heap     Heap
                 Total    Dirty    Clean    Dirty     Size    Alloc     Free
                ------   ------   ------   ------   ------   ------   ------
  Native Heap    10468    10408        0        0    20480    14462     6017
  Dalvik Heap    34340    33816        0        0    62436    53883     8553
 Dalvik Other      972      972        0        0
        Stack     1144     1144        0        0
      Gfx dev    35300    35300        0        0
    Other dev        5        0        4        0
     .so mmap     1943      504      188        0
    .apk mmap      598        0      136        0
    .ttf mmap      134        0       68        0
    .dex mmap     3908        0     3904        0
    .oat mmap     1344        0       56        0
    .art mmap     2037     1784       28        0
   Other mmap       30        4        0        0
   EGL mtrack    73072    73072        0        0
    GL mtrack    51044    51044        0        0
      Unknown      185      184        0        0
        TOTAL   216524   208232     4384        0    82916    68345    14570

 Dalvik Details
        .Heap     6568     6568        0        0
         .LOS    24771    24404        0        0
          .GC      500      500        0        0
    .JITCache      428      428        0        0
      .Zygote     1093      936        0        0
   .NonMoving     1908     1908        0        0
 .IndirectRef       44       44        0        0

 Objects
               Views:       90         ViewRootImpl:        1
         AppContexts:        4           Activities:        1
              Assets:        2        AssetManagers:        2
       Local Binders:       21        Proxy Binders:       28
       Parcel memory:       18         Parcel count:       74
    Death Recipients:        2      OpenSSL Sockets:        2

در اینجا یک dumpsys قدیمی در Dalvik از برنامه Gmail است:

** MEMINFO in pid 9953 [com.google.android.gm] **
                 Pss     Pss  Shared Private  Shared Private    Heap    Heap    Heap
               Total   Clean   Dirty   Dirty   Clean   Clean    Size   Alloc    Free
              ------  ------  ------  ------  ------  ------  ------  ------  ------
  Native Heap      0       0       0       0       0       0    7800    7637(6)  126
  Dalvik Heap   5110(3)    0    4136    4988(3)    0       0    9168    8958(6)  210
 Dalvik Other   2850       0    2684    2772       0       0
        Stack     36       0       8      36       0       0
       Cursor    136       0       0     136       0       0
       Ashmem     12       0      28       0       0       0
    Other dev    380       0      24     376       0       4
     .so mmap   5443(5) 1996    2584    2664(5) 5788    1996(5)
    .apk mmap    235      32       0       0    1252      32
    .ttf mmap     36      12       0       0      88      12
    .dex mmap   3019(5) 2148       0       0    8936    2148(5)
   Other mmap    107       0       8       8     324      68
      Unknown   6994(4)    0     252    6992(4)    0       0
        TOTAL  24358(1) 4188    9724   17972(2)16388    4260(2)16968   16595     336

 Objects
               Views:    426         ViewRootImpl:        3(8)
         AppContexts:      6(7)        Activities:        2(7)
              Assets:      2        AssetManagers:        2
       Local Binders:     64        Proxy Binders:       34
    Death Recipients:      0
     OpenSSL Sockets:      1

 SQL
         MEMORY_USED:   1739
  PAGECACHE_OVERFLOW:   1164          MALLOC_SIZE:       62

به طور کلی، فقط به ستون Pss Total و Private Dirty توجه کنید. در برخی موارد، ستون های Private Clean و Heap Alloc نیز داده های جالبی را ارائه می دهند.

موارد زیر اطلاعات بیشتری در مورد تخصیص حافظه متفاوتی که باید رعایت کنید ارائه می دهد:

Dalvik Heap
RAM مورد استفاده توسط تخصیص Dalvik در برنامه شما. Pss Total شامل تمام تخصیص‌های Zygote می‌شود که بر اساس اشتراک آن‌ها در فرآیندها، همانطور که در تعریف PSS توضیح داده شده است، وزن می‌شود. شماره Private Dirty همان RAM واقعی است که فقط به پشته برنامه شما متعهد شده است، متشکل از تخصیص‌های خودتان و هر صفحه تخصیص Zygote که از زمان قطع فرآیند برنامه شما از Zygote تغییر کرده است.

توجه: در نسخه‌های پلتفرم جدیدتر که دارای بخش Dalvik Other هستند، اعداد Pss Total و Private Dirty برای Dalvik Heap شامل سربار Dalvik نمی‌شوند، مانند جمع‌آوری به‌موقع (JIT) و حسابداری GC، در حالی که فهرست نسخه‌های قدیمی‌تر همه اینها تحت نظر Dalvik ترکیب شد.

Heap Alloc مقدار حافظه ای است که Dalvik و تخصیص دهنده Heap بومی برای برنامه شما ردیابی می کنند. این مقدار بزرگتر از Pss Total و Private Dirty است زیرا فرآیند شما از Zygote جدا شده است و شامل تخصیص هایی است که فرآیند شما با سایرین به اشتراک می گذارد.

.so mmap و .dex mmap
RAM برای کدهای .so (بومی) و .dex (Dalvik یا ART) نگاشت شده استفاده می شود. شماره Pss Total شامل کد پلت فرم است که در بین برنامه ها به اشتراک گذاشته شده است. Private Clean کد خود برنامه شماست. به طور کلی، اندازه واقعی نقشه برداری بزرگتر است. RAM در اینجا تنها چیزی است که در حال حاضر برای کدهایی که توسط برنامه اجرا شده است در RAM وجود دارد. با این حال، .so mmap یک کثیف خصوصی بزرگ دارد، که به دلیل رفع مشکل کد اصلی هنگام بارگذاری در آدرس نهایی آن است.
.oat mmap
این مقدار RAM است که توسط تصویر کد استفاده می شود. این بر اساس کلاس های از پیش بارگذاری شده است که معمولاً توسط چندین برنامه استفاده می شود. این تصویر در همه برنامه ها به اشتراک گذاشته شده است و برنامه های خاصی بر آن تأثیر نمی گذارد.
.art mmap
این مقدار RAM است که توسط تصویر پشته استفاده می شود. این بر اساس کلاس های از پیش بارگذاری شده است که معمولاً توسط چندین برنامه استفاده می شود. این تصویر در همه برنامه ها به اشتراک گذاشته شده است و برنامه های خاصی بر آن تأثیر نمی گذارد. حتی اگر تصویر ART حاوی نمونه‌های Object باشد، در اندازه پشته شما حساب نمی‌شود.
.Heap (فقط با پرچم -d )
این مقدار حافظه پشته برای برنامه شما است. این شامل اشیاء در تصویر و فضاهای بزرگ اشیاء نمی شود، اما شامل فضای Zygote و فضای غیر متحرک می شود.
.LOS (فقط با پرچم -d )
این مقدار RAM است که توسط فضای شی بزرگ ART استفاده می شود. این شامل اجسام بزرگ Zygote می شود. اشیاء بزرگ همگی تخصیص آرایه های اولیه بزرگتر از 12 کیلوبایت هستند.
.GC (فقط با پرچم -d )
این هزینه سربار برای جمع آوری زباله است. هیچ راهی برای کاهش این سربار وجود ندارد.
.JITCache (فقط با پرچم -d )
این مقدار حافظه ای است که توسط حافظه پنهان داده و کد JIT استفاده می شود. به طور معمول، این صفر است، زیرا همه برنامه ها در زمان نصب کامپایل می شوند.
.Zygote (فقط با پرچم -d )
این مقدار حافظه استفاده شده توسط فضای Zygote است. فضای Zygote در هنگام راه اندازی دستگاه ایجاد می شود و هرگز اختصاص داده نمی شود.
.NonMoving (فقط با پرچم -d )
این مقدار RAM است که توسط فضای غیر متحرک ART استفاده می شود. فضای غیر متحرک شامل اشیاء غیر متحرک خاصی مانند فیلدها و روش ها می باشد. می‌توانید با استفاده از فیلدها و روش‌های کمتر در برنامه خود، این بخش را کاهش دهید.
.IndirectRef (فقط با پرچم -d )
این مقدار RAM است که توسط جداول مرجع غیر مستقیم ART استفاده می شود. معمولاً این مقدار کم است، اما اگر خیلی زیاد باشد، ممکن است بتوانید با کاهش تعداد مراجع محلی و جهانی JNI استفاده شده، آن را کاهش دهید.
Unknown
هر صفحه RAM که سیستم نمی تواند در یکی از موارد خاص دیگر طبقه بندی کند. در حال حاضر، این عمدتاً شامل تخصیص‌های بومی است که به دلیل تصادفی‌سازی طرح‌بندی فضای آدرس (ASLR) توسط ابزار هنگام جمع‌آوری این داده‌ها قابل شناسایی نیست. مانند Heap Dalvik، Pss Total for Unknown اشتراک گذاری با Zygote را در نظر می گیرد و Private Dirty RAM ناشناخته ای است که فقط به برنامه شما اختصاص داده شده است.
TOTAL
کل رم متناسب با اندازه مجموعه (PSS) مورد استفاده فرآیند شما. این مجموع تمام فیلدهای PSS بالای آن است. وزن کلی حافظه پردازش شما را نشان می دهد که می تواند مستقیماً با سایر فرآیندها و کل RAM موجود مقایسه شود.

Private Dirty و Private Clean مجموع تخصیص های موجود در فرآیند شما هستند که با سایر فرآیندها به اشتراک گذاشته نمی شوند. هنگامی که فرآیند شما از بین می رود، تمام RAM از این تخصیص ها به سیستم باز می گردد. Private Clean همچنین می‌تواند قبل از از بین رفتن فرآیند شما صفحه‌بندی و منتشر شود، اما Private Dirty فقط در صورت تخریب فرآیند منتشر می‌شود.

رم کثیف صفحاتی هستند که اصلاح شده اند و بنابراین باید به رم متعهد بمانند زیرا تعویضی وجود ندارد. Clean RAM صفحاتی هستند که از یک فایل ثابت مانند کد در حال اجرا نقشه برداری شده اند و در صورت عدم استفاده برای مدتی می توان آنها را صفحه بندی کرد.

ViewRootImpl
تعداد بازدیدهای ریشه ای که در فرآیند شما فعال هستند. هر نمای ریشه با یک پنجره مرتبط است، بنابراین می تواند به شما کمک کند نشت حافظه مربوط به دیالوگ ها یا پنجره های دیگر را شناسایی کنید.
AppContexts و Activities
تعداد اشیاء Context و Activity برنامه که در حال حاضر در فرآیند شما زندگی می کنند. این می تواند به شما کمک کند تا به سرعت اشیاء Activity لو رفته را شناسایی کنید که به دلیل ارجاعات ثابت روی آنها قابل جمع آوری نیست، که معمول است. این اشیاء اغلب دارای تخصیص های بسیار دیگری هستند که آنها را راهی مناسب برای ردیابی نشت های حافظه بزرگ می کند.