TextVersion_05_OOM异常
来源:互联网 发布:上饶网络教育报名时间 编辑:程序博客网 时间:2024/04/30 05:08
OOM异常
OOM异常(Out Of Memory Error)
哪些情况会导致OOM异常
1.图片过大
Android中用bitmap很容易内存溢出,
比如报这个错: java.lang.OutOfMemoryError:bitmap size exceeds VM budget.
解决1: 等比例缩小图片
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 2;
//Options 只保存图片尺寸大小,不保存图片到内存
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inSampleSize = 2;
Bitmap bmp = null;
bmp = BitmapFactory.decodeResource(getResources(),mImageIds[position],opts);
//回收
bmp.recycle();
以上代码可以优化内存溢出,但它只是改变图片大小,并不能彻底解决内存溢出。
解决2: 对图片采用软引用,及时进行recycle()操作
SoftReference<Bitmap> bitmap = new SoftReference<Bitmap>(pBitmap);
if(bitmap != null){
if(bitmap.get() != null && !bitmap.get().isRecycled()){
bitmap.get().recycle();
bitmap = null;
}
}
2.界面切换导致OOM
有时候我们会发现这样的问题,横竖屏切换 N 次后OOM了。
这种问题没有固定的解决方法,但是我们可以从以下几个方面下手分析。
1.看看页面布局中有没有大图片
去除 xml 中相关设置,改在程序中设置背景图(放在onCreate()方法中):
Drawable drawable = getResources().getDrawable(R.drawable.id);
ImageView imageView = new ImageView(this);
imageView.setBackgroundDrawable(drawable);
在 Activity destory 时注意,
drawable.setCallback(null); 防止 Activity得不到及时的释放。
2.跟上面相似,直接把xml配置文件加载成view再放到一个容器里
然后直接调用
this.setContentView(View view);方法
避免xml的重复加载
3.在页面切换时尽可能少地重复使用代码
比如:
重复调用数据库,
重复使用某些对象
3.查询数据库没有关闭游标
应用中经常进行查询数据库操作,
但是经常会使用完Cursor游标没有关闭
如果查询结果集比较小,内存消耗就不容易被发现
但是常时间大量操作的话就会内存溢出
4.构造Adapter时,没有使用缓存的convertView
在使用Adapter的时候,尽可能使用convertView
5.Bitmap对象不再使用时要调用recycle()释放内存
有时需要手动操作Bitmap对象,如果一个Bitmap对象比较占内存
那么就要调用recycle()释放内存
6.其他情况
Android应用中最典型的需要释放内存的情况
就是在Activity的生命周期中
onPause(),onStop(),onDestroy()这几个方法中
都要看情况释放一些资源
- TextVersion_05_OOM异常
- 异常
- 异常!
- 异常
- 异常
- 异常
- 异常
- 异常
- 异常
- 异常
- 异常
- 异常
- 异常
- 异常
- 异常
- 异常
- 异常
- 异常
- 同步、异步、阻塞与非阻塞
- UIView的位置和尺寸
- GestureDetector和SimpleOnGestureListener的使用教程
- 管理 node 版本,选择 nvm 还是 n?
- Integrating C++ with QML
- TextVersion_05_OOM异常
- cocos2dx-3.x android ant配置实现单工程管理
- Apache HttpServer启动出错处理
- PHP服务器时间
- TextVersion_06_Android性能优化
- django中templates在settings的配置
- Java对象序列化ObjectOutputStream和ObjectInputStream示例
- Leetcode Everyday: 243. Shortest Word Distance
- 个人开公司的流程及费用