ANR產生的原因及其定位分析 阿新 • • 發佈:2019-02-01 前言 ANR是Android 中獨有的概念,全稱Application No Responding 如何定位和和避免出現這個問題是Android程式設計師的必備修養 一 、ANR產生的原因 1.1 ANR 產生的原因 只有當應用程式的UI執行緒響應超時才會引起ANR 超時產生的原因有兩種,1 當前事件沒有機會處理,例如UI執行緒正在響應另外的事件,當前事件被某個事件給阻塞掉了 2 當前事件正在處理 但是由於耗時太長沒有能及時的完成 1.1.2產生原因分類 根據產生原因不同超時時間也不盡相同 可以分為 Activity類(5秒)廣播接收者類(10秒) 服務類(20秒) 二 典型的ANR問題場景 1.應用程式UI執行緒存在耗時操作,例如在UI執行緒中進行網路請求,資料庫操作或者檔案操作等,可能會導致UI執行緒無法及時處理使用者輸入等,。 2.應用程式UI執行緒等待子執行緒釋放某個鎖,從而無法處理使用者的請求的輸入 3.耗時操作的動畫需要大量的計算工作,可能導致CPU負載過重 三、ANR的定位和分析 當發生ANR時候開發者可以結合logcat日誌和生成的定位於手機內部的/data/anr/traces.txt檔案進行分析和定位