Android异常与性能优化相关面试问题-ANR异常面试问题详解

Posted webor2006

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android异常与性能优化相关面试问题-ANR异常面试问题详解相关的知识,希望对你有一定的参考价值。

什么是ANR?

Application Not Responding

造成ANR的主要原因:

应用程序的响应性是由ActivityManager和WindowManager系统服务监视的,当监视到在Activity中主线程点击超过5秒木有响应或者是在广播UI线程里超过10秒木有响应则会导致ANR。下面具体列举一下:

  • 主线程被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()回调中尽量避免耗时的代码。

以上是关于Android异常与性能优化相关面试问题-ANR异常面试问题详解的主要内容,如果未能解决你的问题,请参考以下文章

Android异常与性能优化相关面试问题-bitmap面试问题详解

Android性能优化高阶:卡顿ANR死锁,线上如何监控?

Android 高级面试题及答案

31到Android面试题,收藏下?

Android 高级面试题及答案

Android性能优化--ANR