Android異常與性能優化相關面試問題-ANR異常面試問題詳解

什麼是ANR?網絡

Application Not Respondingoop

形成ANR的主要緣由:post

應用程序的響應性是由ActivityManager和WindowManager系統服務監視的,當監視到在Activity中主線程點擊超過5秒木有響應或者是在廣播UI線程裏超過10秒木有響應則會致使ANR。下面具體列舉一下:spa

  • 主線程被I/O操做(從4.0以後網絡IO不容許在主線程中)阻塞。
  • 主線程中存在耗時的計算。

形成ANR的主要緣由:Android中哪些操做是在主線程呢?線程

  • Activity的全部生命週期回調都是執行在主線程的。
  • Service默認就是執行在主線程的。
  • BroadcastReceiver的onReceive回調是執行在主線程的。
  • 沒有使用子線程的looper的Handler的handleMessage,post(Runnable)是執行在主線程的。
  • AsyncTask的回調中除了doInBackground,其餘都是執行在主線程。

如何解決ANR:生命週期

  • 使用Asynctask處理耗時IO操做。
  • 使用Thread或者HandlerThread提升優先級。
  • 使用Handler來處理工做線程的耗時任務。
  • Activity的onCreate()和onResume()回調中儘可能避免耗時的代碼。
相關文章
相關標籤/搜索