Android性能優化(三):響應優化

Android性能優化(三):響應優化

1、爲什麼要進行響應優化?
我在佈局優化的文章中說過,Android系統每隔16ms會發出一個VSYNC信號來觸發UI的渲染,如果在16ms內不能完成UI的渲染,界面就出現卡頓的情況。
(1)頁面如果5秒鐘之內無法響應屏幕觸摸事件或者鍵盤輸入事件就會出現ANR;
(2)BroadcastReceiver如果10秒鐘之內還未執行完操作也會出現ANR;
(3)主線程在執行Service的各個生命週期函數時20秒內沒有執行完畢。
爲了避免ANR,我們需要進行響應速度的優化。

2、如何查找ANR產生的原因?
當出現ANR時,系統會手機/data/anr/目錄下生成traces.txt文件,我們可以使用adb命令將它取出來分析;

adb pull data/anr/traces.txt .

通過AS開發工具也可以看到,如圖:
在這裏插入圖片描述
3、如何避免ANR?

  1. 避免主線程堵塞:開闢單獨的子線程來處理耗時阻塞事務。
  2. 避免CPU滿負荷, I/O阻塞:文件讀寫或數據庫操作不要在主線程中執行, 通過開闢子線程的方式異步執行。
  3. 避免內存泄漏導致ANR:內存泄漏會導致手機內存不足,造成ANR。

4、如何檢測監控應用主線程卡頓?
檢測工具:BlockCanary

  • BlockCanary是一個非侵入式式的性能監控函數庫,用來監控應用主線程的卡頓。

  • 它的基本原理是利用主線程的消息隊列處理機制,通過對比消息分發開始和結束的時間點來判斷是否超過設定的時間,如果是,則判斷爲主線程卡頓。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章