Android面试复习-ANR,OOM

2019-07-30  本文已影响0人  Margolu

一.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方法执行对象的创建

谨慎使用多线程

上一篇 下一篇

猜你喜欢

热点阅读