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()回调中尽可能避免耗时的代码。
相关文章
相关标签/搜索