1.只有主線程才會產生anr,主線程就是ui執行緒;
2.必須發生某些輸入事件或特定操作,比如按鍵或觸屏等輸入事件,在broadcastreceiver或service的各個生命週期呼叫函式;
3.上述事件響應超時,不同的context規定的上限時間不同
a.主線程對輸入事件5秒內沒有處理完畢
b.主線程在執行broadcastreceiver的onreceive()函式時10秒內沒有處理完畢
c.主線程在service的各個生命週期函式時20秒內沒有處理完畢。
1.主線程執行了耗時操作,比如資料庫操作或網路程式設計
2.其他程序(就是其他程式)占用cpu導致本程序得不到cpu時間片,比如其他程序的頻繁讀寫操作可能會導致這個問題。
細分的話,導致anr的原因有如下幾點:
1.耗時的網路訪問
2.大量的資料讀寫
3.資料庫操作
4.硬體操作(比如camera)
5.呼叫thread的join()方法、sleep()方法、wait()方法或者等待執行緒鎖的時候
6.service binder的數量達到上限
7.system server中發生watchdog anr
8.service忙導致超時無響應
9.其他執行緒持有鎖,導致主線程等待超時
10.其它執行緒終止或崩潰導致主線程一直等待
1.避免在主線程執行耗時操作,所有耗時操作應新開乙個子執行緒完成,然後再在主線程更新ui。
2.broadcastreceiver要執行耗時操作時應啟動乙個service,將耗時操作交給service來完成。
3.避免在intent receiver裡啟動乙個activity,因為它會建立乙個新的畫面,並從當前使用者正在執行的程式上搶奪焦點。如果你的應用程式在響應intent廣 播時需要向使用者展示什麼,你應該使用notification manager來實現。
android anr:原理分析及解決辦法
anr產生的原因及定位分析
android anr日誌分析指南
阿里巴巴: 給你乙個demo 你如何快速定位anr
Android ANR發生的原因總結和解決辦法
首先anr的發生是有條件限制的,分為以下三點 只有主線程才會產生anr,主線程就是ui執行緒 必須發生某些輸入事件或特定操作,比如按鍵或觸屏等輸入事件,在broadcastreceiver或service的各個生命週期呼叫函式 上述事件響應超時,不同的context規定的上限時間不同 a.主線程對輸...
Android ANR發生的原因總結和解決辦法
anr定義 anr發生條件 首先anr的發生是有條件限制的,分為以下三點 1.只有主線程才會產生anr,主線程就是ui執行緒 2.必須發生某些輸入事件或特定操作,比如按鍵或觸屏等輸入事件,在broadcastreceiver或service的各個生命週期呼叫函式 3.上述事件響應超時,不同的cont...
Android ANR產生的原因及定位分析
典型的anr問題場景 1 ui執行緒存在耗時操作,例如ui執行緒中存在網路請求 資料庫操作或者檔案操作等。android 4.0以後,如果在ui執行緒進行網路操作會直接報異常 2 ui執行緒等待子執行緒釋放某個鎖,從而無法處理使用者輸入 3 耗時的動畫需要大量的計算工作,導致cpu負載過重 anr的...