ANR面试讲解

2019-05-19  本文已影响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回调中尽量避免耗时的代码


上一篇下一篇

猜你喜欢

热点阅读