Android性能優化三 ANR優化

ANR的概念

ANR (Application Not Responding) 應用程序無響應。若是你的應用程序在UI線程被阻塞太長時間就會出現ANR 一般出現ANR,系統會彈出一個提示對話框,讓用戶知道,該程序正在被阻塞,是否等待仍是關閉。linux

ANR的類型

  1. KeyDispathTimeout(常見)面試

    • input事件在5s內沒有處理完成發生了ANR
    • logcat日誌關鍵字:Input event dispatching timed out

    注意: input的超時機制和其餘不一樣,對於input來講即便某次事件執行時間超過timeout時長,只要用戶後續沒有再生成輸入事件,就不會觸發ANR數據庫

  2. BroadcastTimeOutmarkdown

    • 前臺Broadcast: onReceive在10s內沒有處理完成發生ANR。
    • 後臺Broadcast: onReceiver在60s內沒有處理完成發生ANR。
    • logcat日誌關鍵字: Timeout of broadcast BroadcastRecord
    • 根據發送廣播sendBroadcast(Intent intent)中的intent的flags是否包含FLAG_RECEIVER_FOREGROUND來決定把該廣播是放入前臺廣播隊列或者後臺廣播隊列,默認都是後臺廣播
  3. ServiceTimeOut網絡

    • 前臺Service: onCreate onStart onBind 等生命週期內20s內沒有處理完成發生ANR
    • 後臺Service: onCreate onStart onBind 等生命週期內200s內沒有處理完成發生ANR
    • logcat日誌關鍵字: Timeout executing service
  4. ContentProviderTimeOut多線程

    • ConentProvider 在10S內沒有處理完成發生ANR
    • logcat日誌關鍵字: timeout publishing content providers

前臺與後臺ANR

決定是前臺或者後臺ANR取決於該應用發生ANR時對用戶是否可感知ide

能夠看到 若是是後臺ANR那麼就直接關閉 若是是前臺ANR就彈出對話框 當前用戶在界面上oop

ANR是怎麼產生的

Service 是在startService中

靜態廣播 超時檢測過程須要檢測SP

動態廣播 靜態廣播沒有正在執行持久化操做的SP任務,則不須要通過 queued-work-looper線程

ContentProvider超時機制

ContentProvider的超時是在ContentProvider進程首次啓動的時候纔會檢測,當ContentProvider進程已啓動的場景,再次請求ContentProvider並不會觸發ContentProvider超時。spa

input超時機制

常見ANR操做

  1. 主線程進行IO操做好比 操做數據庫 網絡請求 文件操做。 sp文件操做 IO讀寫操做都不在主線程 序列化
  2. 多線程致使的死鎖,主線程被block.
  3. 主線程通訊被對端的Binder對端 block住了
  4. System Server中WatchDog出現ANR
  5. service binder的鏈接達到上線沒法和System Server通訊
  6. 系統資源已耗盡(cpu 管道 io)

ANR如何定位分析

線下:anr發生後會有日誌

logcat:會有日誌 會產生 /data/anr/trace_*.txt 文件線程

在Android手機上 沒有root 沒法訪問那麼 /data/anr/trace.txt

那麼咱們可使用adb bugreport anrlog.zip 就能夠了

讀懂trace.txt文件

  1. 經過logcat日誌,traces文件確認anr發生的時間點
  2. trace文件和CPU使用率/data/anr/trace_*.txt
  3. 經過firstPid來查看主線程的狀態
  4. 其餘線程的狀態

如何監控線上的ANR

  1. FileObserver:監控某個目錄/文件 狀態發生改變 建立 刪除文件 添加內容

監聽data/anr/目錄是否發生變化 而後上傳data/anr/trace*.txt 可是在 fileoberver 被selinux擋住 5.0以後確定會 系統開發能夠修改 .te配置文件修改

  1. watchDog來監控方案

繼承Thread向主線程發送一個handler判斷是否

  1. 線上集成bugly

bugly會集成 手機品牌 型號 配置 大概位置 而後經過money 復現

面試ANR相關問題

相關文章
相關標籤/搜索