Android ANR發生原因總結....

ANR(Application Not Responding) Android系統中應用無響應

是Android系統中比較常見的問題,當出現ANR時一般情況會彈出一個帶有以下文字的對話框提示:

Activity XXX(in XXXXX) is not responding. 比如:


粗略的來分會有兩種情況導致ANR:

第一類:dispatchTimeout 輸入事件分發超時,一般是由於主線程在5秒之內沒有響應輸入事件。

第二類:BroadcastReceiver沒有在系統設定的時間內完成並返回。

再細分的話ANR可能是由主線程導致也可能是由非主線程導致:

由於主線程導致的情況:

1.耗時網絡訪問

2.當有大量數據讀寫操作時再請求數據讀寫

3.數據庫操作(比如其他大數據量應用訪問數據庫導致數據庫負載過重時)

4.硬件操作(比如Camera)

5.調用thread_join() / Sleep() / Wait() 或者等待locker的時候

6.Service binder數量達到上限

7.在system_server中發生WatchDog ANR

8.Service忙導致超時無響應

由於非主線程導致的情況:

1.非主線程持有lock,導致主線程等待lock超時

2.非主線程終止或者崩潰導致主線程一直等待

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