亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

安卓性能調優:內存使用分析和方法調用優化

系統 2024 0

Android 應用的性能分析,優化,需要檢查分析內存使用情況和方法調用情況。本文給出進行這兩方面分析的工具和方法。

內存使用分析


1. 分析內存使用

雖然Android系統的Dalvik虛擬機有垃圾回收機制,但因手機內存使用存在不同于普通PC的更大的限制,內存使用方面的問題,我們更應多加注意。

  1. 一些內存使用問題會非常明顯,比如內存耗盡(不足)時觸發的 OutOfMemoryError 可能會使App直接崩潰。

  2. 另有一些內存問題則表現得不那么明顯,但他們會讓你的App以及系統變得越來越慢。

當有以上兩種情況之一時,就得看看內存的使用情況了,是否存在:

  • 過大的對象,占用內存
  • 有些對象一直被創建,從未被釋放。
2. 工具

在Android的ADT中,提供了兩種工具可以用來分析內存使用

  • 對象分配相關:DDMS中的Allocation Tracker。借助這個工具可以查看對象的生成和分配情況, 可了解到對象在何時被創建,但無法了解整個App的對象分配情況。

  • Heap使用情況相關:

    1. DDMS中的Heap工具。
    2. hprof導出工具,在DDMS中導出hprof文件,在 Memory Analyzer 中查看。

hprof文件是Java 虛擬機的Heap快照

3. 查看Heap實時情況

  1. 打開DDMS,選中應用,點擊Update Heap按鈕
  2. 右側Heap標簽頁,顯示了Heap使用情況
  3. 操作應用,看哪些操作將導致內存用量增大
4. Memeory Analyzer分析內存使用情況

根據實時的Heap使用情情況,我們可以大致判斷哪些操作,哪些頁面可能存在內存是一共問題,但是具體的問題的需要更進一步的數據。

Allocation Tracker提供了對象分配和被引用的詳細的信息

另外,還提供了一個報告,為我們分析提供參考

請在此處下載: Memeory Analyzer

我們可以通過DDMS導出hprof文件,在Memeory Analyzer中分析, 如下:

  1. 打開DDMS, 選中應用,點擊 Dump HPROF file , 等待一段時間, 10幾秒甚至更長,保存hprof文件。
  2. 導出的文件為Dalvik虛擬機格式的,需要轉成J2SE虛擬機格式的,否則Memeory Analyzer無法打開

    在windows中,cmd:

              
                cd /d D:\android\adt\adk\tools
    hprof-conv.exe D:\tmp\com.srain.cube.sample.hprof D:\tmp\com.srain.cube.sample-conv.hprof
    
              
            
  3. 在Memeory Analyzer 中打開文件 打開文件分析的過程中,會提示是否生成分析報告,分析報告會指出哪些對象是可疑的占用內存的對象。

界面展示大致如下:

點擊Histogram:

各對象在列表中,可排序:

  • Shallow Heap: 占用的真正的內存大小
  • Retained Heap: 對象自身的大小 + 所維護的引用的大小

選中某個對象,List Objects -> with incoming reference / with outcoming reference 可查看引用和被應用的情況。 根據這些,加上搜索,可判斷未釋放的或者過大的有問題的對象的位置。

Memeory Analyzer功能強大, 更多用法,點擊這里


方法調用分析

App不流暢卡頓,和方法執行速度有更直接的關系。 主UI線程上的耗時操作,超過5s,系統就會提示用戶,是否終止程序。 在ListView中的 getView() 方法,一個耗時10ms的操作就足夠把你的列表卡頓得慘不忍睹。

Android框架Debug類提供了方法,記錄方法調用的執行數據到一個trace文件,在代碼中:

      
        // 開始 trace文件位置: /sdcard/cube.trace
Debug.startMethodTracing("cube");

// ...
// 其他的代碼

// 停止
Debug.stopMethodTracing();

      
    

在模擬器或者沒SDK的真機上調試時,直接使用 /sdcard下的路徑可能會有Permission deny錯誤,改用機身內部存儲試試。

生成的trace文件,通過adb pull存到本地。

      
        adb pull /sdcard/cube.trace D:\tmp\cube.trace

      
    

直接在ADT的eclipse中打開:

上圖中:

  1. 上部區域(Timeline Panel)為各線程的時間線上的概況
    • 在區域1,鼠標為左右箭頭狀,在放大之后,可拖動縮小尺寸
    • 鼠標放在各線程時間軸區域,比如主線程的2區域,鼠標成十字狀,左右拖動可以選擇關注區域,選擇合適的關注區域,松開鼠標,區域將放大。
  2. 下部區域(Profile Panel)為方法調用情況, 幾個參數介紹如下:
    • cpu time,方法執行的真正的時間
    • real time, cpu time + 其他時間(IO wait, Thread wait)
    • Inc xxx Time, Inc 為 inclusive 縮寫,本方法調用時間以及本方法內部所調用的方法(子方法)的總和
    • Excl xxx Time, Excl 為exclusive 的縮寫,指的除去子方法,該方法本身執行時間
    • Calls + RecurCalls/Total, 顯示父子方法調用次數占比
  3. 選中一個方法,在時間線圖中會有突出顯示。放大時間線圖,可直觀看出方法執行時間長度;看調用圖,可找出該方法被調用的層次關系。
  4. 查看Excl Time 和Inc Time,分析調用關系,可找出真正耗時的方法,找出性能瓶頸。

上圖中,Excl Time 排名第二的方法 bytesToHexString 很可能是有性能問題的。


安卓性能調優:內存使用分析和方法調用優化


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: a级成人毛片久久 | 手机看片福利视频 | 夜夜操天天插 | 一区二区三区中文字幕 | 操天天操 | jizz美女18 | 可以看美女隐私的网站 | 欧美视频在线观看免费 | 国产在线播放一区二区 | 亚洲成色999久久网站 | 2018一级毛片免费观看 | 久久国产精品麻豆映画 | 亚洲无卡视频 | 亚洲视频在线一区二区 | 亚洲综合色吧 | 日日夜夜嗷嗷叫 | 五月天激情视频在线观看 | 二级毛片 | 中文欧美一级强 | 伊人色综 | 色综和| 99精品国产成人a∨免费看 | 热re99久久精品国产99热 | 青青青国产在线手机免费观看 | 中国欧美日韩一区二区三区 | 超清中文乱码精品字幕在线观看 | 亚洲毛片一级带毛片基地 | 国产精品99一区二区三区 | 伊人69| 国产一级特黄全黄毛片 | 成人在线视频国产 | 996热这里有精品青青草原 | 国产99视频精品免费视频7 | 男人av的天堂 | 国产精品免费观在线 | 欧美金妇欧美乱妇xxxx | 国产午夜亚洲精品不卡福利 | 久久香蕉国产线看精品 | 亚洲 欧美 bt | 成人精品一区二区三区校园激情 | 中文字幕日韩一区二区三区不 |