Android——ANR

概述

ANR(Application Not Responding)是指應用無響應。

Android系統對於一些事件都在在一定時間內完成,如果超過預訂時間沒有得到相應就會在成ANR。

ANR機制是對應用程序主線程的限制,要求主線程在限定的時間內處理完一些最常見的操作(啓動服務、處理廣播、處理輸入), 如果處理超時,則認爲主線程已經失去了響應其他操作的能力。

場景

導致ANR的場景主要有以下:

  • Service Timeout(20 seconds) —— Service在特定的時間內無法處理完成
  • Broadcast Timeout(10 seconds) ——BroadcastReceiver在特定時間內無法處理完成
  • ContentProvider Timeout——內容提供者執行超時
  • KeyDispatch Timeout(5 seconds) ——主要類型按鍵或觸摸事件在特定時間內無響應

如何避免

將所有耗時操作,比如訪問網絡,Socket 通信,查詢大量SQL 語句,複雜邏輯計算等都放在子線程中去,然後通過handler.sendMessage、runonUITread、AsyncTask 等方式更新UI,以確保用戶界面操作的流暢度。

UI線程儘量只做跟UI相關的工作。

用Handler來處理UIThread和別的Thread之間的交互。

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