一.ANR
1.什么是ANR
Application Not Responding,页面无响应的对话框
2.发生ANR的条件
应用程序的响应性是由ActivityManager和WindowManager系统服务监视的,当ANR发生条件满足时,就会弹出ANR的对话框
Activity超过5秒无响应
BroadcastReceiver超过10秒无相应
Service超过20秒无响应
3.造成ANR的主要原因
主线程IO被阻塞
Activity的所有生命周期回调都是执行在主线程的
Service默认执行在主线程中
BroadcastReceiver的回调执行在主线程中
AsyncTask的回调除了doInBackground,其他都是在主线程中
没有使用子线程looper的handler的sendMessage,post(Runnable)都是执行在主线程中
4.解决ANR
使用AsyncTask处理耗时IO操作
使用Thread或HandlerThread提高优先级
使用Handler处理工作线程的耗时操作
Activity的onCreate和onResume回调尽量避免耗时操作
二.OOM
1.什么是OOM
out of memory内存溢出,当前占用内存加上我们申请的内存资源超过了Dalvik虚拟机的最大内存限制就会抛出Out of memory
2.相关概念
内存溢出:程序在申请内存时,没有足够的空间供其使用
内存泄漏:程序分配出去的内存不再使用,无法进行回收
内存抖动:程序短时间内大量创建对象,然后回收的现象
3.解决OOM
Bitmap相关
图片压缩
加载缩略图
在滚动时不加载图片,回收Bitmap,使用inBitmap属性
捕获异常
其他相关
listView重用convertView,使用lyu
避免onDraw方法执行对象的创建
谨慎使用多线程
网友评论