我是靠谱客的博主 自觉篮球,最近开发中收集的这篇文章主要介绍Android面试——OOM及ANR,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、什么是oom?

OOM就是当前占用的内存加上我们申请的内存资源超过了Dalvik虚拟机的最大内存限制就会抛出的Out Of
Memory的异常,主要是因为过多的内存泄漏造成的OOM。

二、造成OOM的主要原因有哪些?平时开发中需要注意什么?

bitmap是内存消耗大户,所以为了避免出现oom,首先要对bitmap进行优化:

1.图片显示:如:显示缩略图时不调用网络请求加载大图、ListView滑动时不加载图片

2.及时释放内存

3.图片压缩:控制图片大小

4.inBitmap属性:加载新图片会使用之前图片所在的内存空间

5.使用缓存策略:如lru(将最近最少使用的图片清除出缓存)

其他原因及注意:

1.不恰当的使用static关键字。 尽量不要使用static保存对象。

2.内部类对Activity的引用。 内部类对象如果引用Activity对象,同时有很长的生命周期的话会导致 Activity对象释放不及时。

3.Bitmap使用。 大量的bitmap会导致 程序包和运行时的内存消耗变大。

4.游标cursor的使用。 Cursor 对象用完应该及时关闭。

5.避免在onDraw方法里面执行对象的创建

6.谨慎使用多线程

三、内存溢出OOM / 内存抖动 / 内存泄漏这三者是什么关系?

OOM是当前占用的内存加上我们申请的内存资源超过了Dalvik虚拟机的最大内存限制;

内存抖动是短时间内大量的对象被创建,然后又被马上释放;

内存泄漏指无用对象持续占有内存或得不到及时释放,从而造成的内存空间的浪费,过多的内存泄漏会造成OOM.

最后

以上就是自觉篮球为你收集整理的Android面试——OOM及ANR的全部内容,希望文章能够帮你解决Android面试——OOM及ANR所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部