1. 程式人生 > >Android 效能指標檢測工具

Android 效能指標檢測工具

Android常見問題

  • 記憶體洩漏:不使用的記憶體空間(物件)一直被引用著沒有得到釋放。

  • 記憶體抖動:短時間內大量建立物件又在短時間內頻繁觸發GC導致記憶體波動很大,android虛擬機器執行GC操作時需要耗費CPU效能頻繁GC會到來嚴重的效能問題。記憶體抖動是因為大量的物件被建立又在短時間內馬上被釋放。瞬間產生大量的物件會嚴重佔用Young Generation的記憶體區域,當達到閥值,剩餘空間不夠的時候,也會觸發GC。即使每次分配的物件佔用了很少的記憶體,但是他們疊加在一起會增加Heap的壓力,從而觸發更多其他型別的GC。這個操作有可能會影響到幀率,並使得使用者感知到效能問題。

  • 記憶體溢位:記憶體洩漏到一定程度超出系統給程序分配的記憶體大小就會造成記憶體溢位程式奔潰,或者載入一個或多個大型檔案(圖片)到記憶體中也會導致記憶體溢位。

  • ANR:應用無響應,程式碼效率過低或者在主執行緒執行耗時操作。

記憶體監控工具

  • Memory Monitor:檢視整個app所佔用的記憶體,以及發生GC的時刻,短時間內發生大量的GC操作是一個危險的訊號。

  • Heap Viewer:實時檢視App分配的記憶體大小和空閒記憶體大小,發現Memory Leaks

  • Heap Snapshot:獲取Java堆記憶體詳細資訊,可以分析出記憶體洩漏的問題

  • Memory Analyzer Tool:MAT一款詳細分析Java堆記憶體的工具,該工具非常強大,為了使用該工具,我們需要hprof檔案,該檔案我們在之前的Heap Snapshot工具的時候,我們就生成了該檔案。但是該檔案不能直接被MAT使用,需要進行一步轉化,可以使用hprof-conv命令來轉化,但是Android Studio可以直接轉化。

效能監控工具

  • Profile GPU Rendering:連續多幀每一幀的重新整理時間都超過16ms就應該被視為效能問題。

  • TraceView:從程式碼層面分析效能問題,針對每個方法來分析,比如當我們發現我們的應用出現卡頓的時候,我們可以來分析出現卡頓時在方法的呼叫上有沒有很耗時的操作,關注以下兩個問題:

  • 呼叫次數不多,但是每一次執行都很耗時
  • 方法耗時不大,但是呼叫次數太多

  • Systrace:計算容器的效能並發現效能的瓶頸。

  • GPU Monitor:分析GPU的效能,實時檢視繪製每一幀所花費的時間,與Profile GPU Rendering差不多。

  • Strict Mode:UI執行緒被阻塞超過5秒,就會出現ANR,這太糟糕了。防止程式出現ANR是很重要的事情,那麼如何找出程式裡面潛在的坑,預防ANR呢?很多大部分情況下執行很快的方法,但是他們有可能存在巨大的隱患,這些隱患的爆發就很容易導致ANR。
    Android提供了一個叫做Strict Mode的工具,我們可以通過手機設定裡面的開發者選項,開啟Strict Mode選項,如果程式存在潛在的隱患,螢幕就會閃現紅色。我們也可以通過StrictMode API在程式碼層面做細化的跟蹤,可以設定StrictMode監聽那些潛在問題,出現問題時如何提醒開發者,可以對螢幕閃紅色,也可以輸出錯誤日誌。

  • LINT:Lint是Android提供的一個靜態掃描應用原始碼並找出其中的潛在問題的一個強大的工具。
    例如,如果我們在onDraw方法裡面執行了new物件的操作,Lint就會提示我們這裡有效能問題,並提出對應的建議方案。Lint已經整合到Android Studio中了,我們可以手動去觸發這個工具,點選工具欄的Analysis -> Inspect Code,觸發之後,Lint會開始工作,並把結果輸出到底部的工具欄,我們可以逐個檢視原因並根據指示做相應的優化修改。
    Lint的功能非常強大,他能夠掃描各種問題。當然我們可以通過Android Studio設定找到Lint,對Lint做一些定製化掃描的設定,可以選擇忽略掉那些不想Lint去掃描的選項,我們還可以針對部分掃描內容修改它的提示優先順序。
    建議把與記憶體有關的選項中的嚴重程度標記為紅色的Error,對於Layout的效能問題標記為黃色Warning。

  • Monkey:Monkey是可以執行在模擬器裡或實際裝置中的程式。它向系統傳送偽隨機的使用者事件流(如按鍵輸入、觸控式螢幕輸入、手勢輸入等),實現對正在開發的應用程式進行壓力測試。

  • 其他工具:其他效能檢測工具

網路監控工具