adb 命令相信大家都經(jīng)常使用延旧,但是很多安卓開(kāi)發(fā)者只是用了安裝卸載,其實(shí)adb 還有很多強(qiáng)大的功能
adb 查看應(yīng)用包名
很多時(shí)候我們?nèi)ツ嫦蛉思业腁PK,都能知道包名罚缕,或者很多時(shí)候要利用APK包名搞些事情就可以使用adb
adb shell pm list packages
使用以上命令就可以查看我們?cè)O(shè)備上所有應(yīng)用的包名,如果想知道應(yīng)用對(duì)應(yīng)的apk文件在手機(jī)上的安裝位置則可以在上面的命令后加-f參數(shù)
adb shell pm list packages -f
如果配置了aapt可以使用下面的命令,如果沒(méi)配環(huán)境怎静,直接在aapt目錄下
沒(méi)有apk邮弹,應(yīng)用已經(jīng)安裝到手機(jī)或虛擬機(jī)中
啟動(dòng)logcat,使用命令
adb logcat ActivityManager:I *:s
然后啟動(dòng)應(yīng)用,這個(gè)時(shí)候 logcat會(huì)出現(xiàn)下面的:
so.ofo.labofo
com.xiaoniu.finance 都是應(yīng)用啟動(dòng)的包名
adb 查看內(nèi)存 adb shell dumpsys meminfo 使用
adb shell dumpsys meminfo 包名
這里我直接拿淘寶的應(yīng)用了蚓聘,如下:
我們重點(diǎn)看下下面幾個(gè)參數(shù):
allocated是分配了的內(nèi)存腌乡,對(duì)應(yīng)的左邊分別是native和dalvik 兩個(gè)地方
Heap Size :代表最大總共分配空間
Heap Alloc :已經(jīng)分配的內(nèi)存空間
mallinfo是一個(gè)C庫(kù), mallinfo 函數(shù)提供了各種各樣的通過(guò)C的malloc()函數(shù)分配的內(nèi)存的統(tǒng)計(jì)信息夜牡。
Dalvik Heap Size:從Runtime totalMemory()獲得与纽,Dalvik Heap總共的內(nèi)存大小。
Dalvik Heap Alloc: Runtime totalMemory()-freeMemory() ,Dalvik Heap分配的內(nèi)存大小急迂。
Dalvik Heap Free:從Runtime freeMemory()獲得影所,Dalvik Heap剩余的內(nèi)存大小。
Dalvik Heap Size 約等于Dalvik Heap Alloc + Dalvik Heap Free
OtherPss, include Cursor,Ashmem, Other Dev, .so mmap, .jar mmap, .apk mmap, .ttf mmap, .dex mmap, Other mmap, Unkown統(tǒng)計(jì)信息都可以在process的smap文件看到僚碎。
Objects and SQL 信息都是從Android Debug信息中獲得猴娩。
當(dāng)總數(shù)也就是total這一列超過(guò)單個(gè)程序內(nèi)存的最大限制時(shí),OOM就很有可能會(huì)出現(xiàn)了听盖,多數(shù)時(shí)候胀溺,發(fā)生OOM 都是在做一些跟圖片相關(guān)的操作
APP summary
再繼續(xù)看上面圖片 app summary
進(jìn)程獨(dú)占內(nèi)存。也就是進(jìn)程銷毀時(shí)可以回收的內(nèi)存容量皆看。通常private Dirty內(nèi)存是最重要的部分仓坞,因?yàn)橹槐蛔约哼M(jìn)程使用。Dirty內(nèi)存是已經(jīng)被修改的內(nèi)存頁(yè)腰吟,因此必須常駐內(nèi)存(因?yàn)闆](méi)有swap)无埃;Clean內(nèi)存是已經(jīng)映射持久文件使用的內(nèi)存頁(yè)(例如正在被執(zhí)行的代碼),因此一段時(shí)間不使用的話就可以置換出去毛雇。
實(shí)際使用內(nèi)存(PSS):
將跨進(jìn)程共享頁(yè)也加入進(jìn)來(lái)嫉称, 進(jìn)行按比例計(jì)算PSS。這樣能夠比較準(zhǔn)確的表示進(jìn)程占用的實(shí)際物理內(nèi)存
通常我們需要關(guān)注PSS TOTAL 和 Private Dirty
Heap Viewer
事實(shí)查看內(nèi)存分配情況和空閑內(nèi)存大小
發(fā)現(xiàn)memory Leaks
AS中點(diǎn)擊機(jī)器人圖標(biāo)打開(kāi)Android Device Mointor灵疮, 如下:
選中進(jìn)程進(jìn)行Heap 分析织阅,點(diǎn)擊update heap, 查看右側(cè)的heap標(biāo)簽頁(yè)
Heap視圖顯示了堆內(nèi)存使用的情況震捣,每次垃圾回收都會(huì)更新荔棉,要查看更新情況, 點(diǎn)擊Cause GC即可
我們需要在執(zhí)行查看內(nèi)存是否有泄漏的用例之前和之后執(zhí)行GC蒿赢,即手動(dòng)點(diǎn)擊Cause GC润樱,觀察allocated大小,查看內(nèi)存是否在一個(gè)穩(wěn)定的數(shù)值羡棵,多次操作壹若,只要內(nèi)存穩(wěn)定,即沒(méi)有內(nèi)存泄漏皂冰, 如果不斷變大店展,即表示有內(nèi)存泄漏。
該工具也可以用來(lái)查看是否會(huì)發(fā)生內(nèi)存抖動(dòng)