美文网首页
ANR面试讲解

ANR面试讲解

作者: 崽子猪 | 来源:发表于2019-05-19 15:05 被阅读0次

    一、ANR?

    1.什么是anr(Application Not Responding)?

    它就是一个应用程序无响应的对话框

    拓展:为什么会造成ANR?

    在主线程中做了耗时操作


    二、造成ANR的主要原因

    原因一:主线程做耗时的IO操作导致阻塞(从4.0之后网络IO不允许在主线程中操作)

    原因二:主线程中存在耗时操作

    拓展:Android中那些操作是在主线程的呢?

    Activity的所有生命周期回调都是在主线程的.

    Service默认是执行在主线程的.(如果想在Service里做耗时操作你可以启用intentService它里面可以做耗时操作)

    BroadcasetReciver的onReceive回调是执行在主线程的.

    没有使用子线程的Looper的Handler的handlerMessage,post(Runnable)是执行在主线程的.

    AsyncTask的回调除了dolnBackground,其他都是执行在主线程的.


    三、如何解决ANR?

    解决一:使用Asynctask处理耗时IO操作.

    解决二:使用Thread或者HandlerThread提高优先级.

    解决三:使用handler来处理工作线程的耗时任务.

    解决四:Activity的onCreate和OnResume回调中尽量避免耗时的代码


    相关文章

      网友评论

          本文标题:ANR面试讲解

          本文链接:https://www.haomeiwen.com/subject/axifzqtx.html