ANR(Application Not Responding,設備無響應)定位和問題所在

如何定位ANR

 如果是在開發機器上出現問題,我們可以通過查看/data/anr/traces.txt即可,最新的ANR信息在最開始部分。

列舉幾種容易出現的問題

  • 主線程被IO操作(從4.0之後網絡IO不允許在主線程中)阻塞。

  • 主線程中存在耗時的計算

  • 主線程中錯誤的操作,比如說,Thread.wait或者Thread.sleep等,Android系統會監控程序的相應狀況,一旦出現上面兩種情況,則會彈出ANR對話框

  • 用戶在5秒內未響應用戶的輸入時間(如按鍵或者觸摸)

  • BroadcastReceiver未在10秒內完成相關的處理

  • Service在特定的時間內無法處理完成 20秒

  • 使用AsyncTask處理耗時IO操作。

  • 使用Thread或者HandlerThread時,調用Process.setThreadPriority(Process.THREADPRIORITYBACKGROUND)設置優先級,否則仍然會降低程序響應,因爲默認Thread的優先級和主線程相同。

  • 使用Handler處理工作線程結果,而不是使用Thread.wait()或者Thread.sleep()來阻塞主線程。

  • Activity的onCreate和onResume回調中儘量避免耗時的代碼

  • BroadcastReceiver中onReceive代碼也要儘量減少耗時,建議使用IntentService處理。

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