Android中的ANR产生的原因以及解决方案
2016-08-18 12:12
567 查看
ANR (Application Not Responding)
ANR定义:在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:Application Not Responding)对话框。用户可以选择“等待”而让程序继续运行,也可以选择“强制关闭”。所以一个流畅的合理的应用程序中不能出现anr,而让用户每次都要处理这个对话框。因此,在程序里对响应性能的设计很重要,这样系统不会显示ANR给用户。
默认情况下,在android中Activity的最长执行时间是5秒,BroadcastReceiver的最长执行时间则是10秒。
一般我们认知的导致ANR的情况都是在主线程进行了耗时操作,但是这样并不完整.实际上有很多中情况都可以导致anr.
粗略的来划分的话一种是在主线程导致的ANR一种是非主线程导致的ANR
在主线程的ANR:
1.网络访问,操作数据库等耗时操作
2.广播或服务运行超时 广播中的代码的约定时间是10s 服务是20s
3.硬件操作
4.serviceBiner数量超限
非主线程的ANR:
子线程持有主线程的lock一直没有释放 导致了主线程阻塞
解决方案:
不要再主线程进行耗时操作 网络请求 图片加载 数据库操作都可以放到子线程中进行 必要的话可以维护一个线程池
子线程和主线程之间可以通过handler或者eventBus进行消息和数据的传递
activity 广播 服务中的代码尽量简洁不要过多
子线程及时释放锁
ANR定义:在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:Application Not Responding)对话框。用户可以选择“等待”而让程序继续运行,也可以选择“强制关闭”。所以一个流畅的合理的应用程序中不能出现anr,而让用户每次都要处理这个对话框。因此,在程序里对响应性能的设计很重要,这样系统不会显示ANR给用户。
默认情况下,在android中Activity的最长执行时间是5秒,BroadcastReceiver的最长执行时间则是10秒。
一般我们认知的导致ANR的情况都是在主线程进行了耗时操作,但是这样并不完整.实际上有很多中情况都可以导致anr.
粗略的来划分的话一种是在主线程导致的ANR一种是非主线程导致的ANR
在主线程的ANR:
1.网络访问,操作数据库等耗时操作
2.广播或服务运行超时 广播中的代码的约定时间是10s 服务是20s
3.硬件操作
4.serviceBiner数量超限
非主线程的ANR:
子线程持有主线程的lock一直没有释放 导致了主线程阻塞
解决方案:
不要再主线程进行耗时操作 网络请求 图片加载 数据库操作都可以放到子线程中进行 必要的话可以维护一个线程池
子线程和主线程之间可以通过handler或者eventBus进行消息和数据的传递
activity 广播 服务中的代码尽量简洁不要过多
子线程及时释放锁
相关文章推荐
- Android ANR产生原因和相关解决方案浅析
- Android内存泄漏产生的原因以及解决方案(OOM)
- Android内存泄漏产生的原因以及解决方案(OOM)
- Android中ANR产生的原因以及定位分析和检测
- Android:内存溢出和内存泄漏的区别、产生原因以及解决方案
- Android ANR产生的原因以及其定位分析
- Java基础知识强化之集合框架笔记19:List集合迭代器使用之 并发修改异常的产生原因 以及 解决方案
- Android开发:V4包fragment, getActivity()报空以及页面产生混乱的解决方案
- Android ANR产生原因和解决办法
- android ANR产生原因和解决办法
- android ANR产生原因和解决办法
- ANR 产生的原因以及解决办法
- Cocos2d-x 实现地图滚动,解释缝隙产生的原因以及解决方案
- android ANR产生原因和解决办法
- Android中什么是ANR?产生的原因,解决办法
- Android手势锁 连线时 产生多段连线的原因以及解决办法
- 内存溢出和内存泄漏的区别、产生原因以及解决方案
- android ANR产生原因(三总常见类型)和解决办法
- Android ANR原因以及开发时如何预防
- android ANR产生原因和解决办法 (