ANR (Application Not Responding)
一般我们认知的导致ANR的情况都是在主线程进行了耗时操作,但是这样并不完整.实际上有很多中情况都可以导致anr.
粗略的来划分的话一种是在主线程导致的ANR一种是非主线程导致的ANR
在主线程的ANR:
1.网络访问,操作数据库等耗时操作
2.广播或服务运行超时 广播中的代码的约定时间是10s 服务是20s
3.硬件操作
4.serviceBiner数量超限
非主线程的ANR:
子线程持有主线程的lock一直没有释放 导致了主线程阻塞
解决方案:
不要再主线程进行耗时操作 网络请求 图片加载 数据库操作都可以放到子线程中进行 必要的话可以维护一个线程池
子线程和主线程之间可以通过handler或者eventBus进行消息和数据的传递
activity 广播 服务中的代码尽量简洁不要过多
子线程及时释放锁