android 中关于内存管理的记录
来源:互联网 发布:js中如何替换数组 编辑:程序博客网 时间:2024/05/18 04:01
最近在项目中添加了腾讯bugly之后,发现程序中总是报各种oom,不知道用过这个工具的兄弟们有没有同样的感觉,用这个工具搞得人比以前更累了,埋怨归埋怨,其实也说明我们写的代码质量不够好而已。
针对项目中的各种oom,我查阅很多大神的博客,解决oom的大致思路是这样的:
1.内存引用上处理(软引用,强化引用,弱引用)
2.图片的处理
3.内存回收机制
4.优化虚拟机的堆内存分配
5.自己设置堆内存的大小
看了之后感觉说的有点虚,个人觉得第一二三点建议还是可以的,但是第五与第四我觉得有点不靠谱,要是你设置了堆内存,万一那个手机没有这样多的内存,你不是把自己坑了吗,所以我在项目中只做了前三点的处理。
内存中使用引用处理的步骤:
引用处理的问题,我也是参考以为大神的博客,链接如下(https://software.intel.com/zh-cn/blogs/2014/02/20/android/?utm_campaign=CSDN&utm_source=intel.csdn.net&utm_medium=Link&utm_content=others-ruanyinyong),自己的表达能力不是很好,就不在此多说了。
图片的处理步骤:
1.以前给控件设置图片是这样写的iv.setImageResource(id),现在换成:
BitmapFactory.Options opt = new BitmapFactory.Options();
opt.inPreferredConfig = Bitmap.Config.RGB_565;
opt.inPurgeable = true;
opt.inInputShareable = true;
opt.inJustDecodeBounds=true;
InputStream is = conetxt.getResources().openRawResource(res);
Bitmap bm = BitmapFactory.decodeStream(is, null, opt);
BitmapDrawable bd = new BitmapDrawable(conetxt.getResources(), bm);
opt.inPreferredConfig = Bitmap.Config.RGB_565;
opt.inPurgeable = true;
opt.inInputShareable = true;
opt.inJustDecodeBounds=true;
InputStream is = conetxt.getResources().openRawResource(res);
Bitmap bm = BitmapFactory.decodeStream(is, null, opt);
BitmapDrawable bd = new BitmapDrawable(conetxt.getResources(), bm);
iv.setBackgroundDrawable(bd)
2.ImageView图片的回收处理
在activity或者frament中的onstop()中对图片资源进行回收:
@Override
protected void onStop() {
// TODO Auto-generated method stub
// 图片资源的回收
releaseImageViews();
super.onStop();
}
protected void onStop() {
// TODO Auto-generated method stub
// 图片资源的回收
releaseImageViews();
super.onStop();
}
private void releaseImageViews() {
releaseImageView((ImageView) findViewById(R.id.iv));
releaseImageView((ImageView) findViewById(R.id.iv));
}
private void releaseImageView(ImageView imageView) {
Drawable d = imageView.getDrawable();
if (d != null)
d.setCallback(null);
imageView.setImageDrawable(null);
imageView.setBackgroundDrawable(null);
}
Drawable d = imageView.getDrawable();
if (d != null)
d.setCallback(null);
imageView.setImageDrawable(null);
imageView.setBackgroundDrawable(null);
}
3.关于内存回收的处理
这个步骤不好列举,大家只要使用图片的时候就,记住使用完成之后要进行图片回收就好了, bitmap.recycle( );
还有一点建议就是在android的布局文件中尽量不要使用图片资源,这个也会出现oom的。
以上就是最近几天修改项目中的oom的一些新的,希望对你们有用。
0 0
- android 中关于内存管理的记录
- 关于android内存管理
- 项目中关于内存管理的问题
- 记录一下Cocos2dX中内存管理的理解和试验
- Android开发中内存管理的注意事项
- Android中关于Proguard的一些记录
- android中关于logcat的管理
- 关于Android应用的内存管理及性能
- 关于Android内存管理及性能优化的一些细节
- 关于Android内存管理及性能优化的一些细节
- WINDOWS中关于内存管理的注册表优化
- 关于map中内存管理的一些理解
- 关于Spark 1.5 版本中Spark自己管理内存而不是由Java管理内存的解释
- Android 的内存管理
- Android的内存管理
- Android的内存管理
- Android内存管理、Android中Dalvik和JVM的区别
- 关于c++的内存管理
- poj 2965 The Pilots Brothers' refrigerator
- java编写的计算器
- datatable linq
- Machine Learning---感知器学习算法
- Linux内核之mmc子系统-sdio(2)
- android 中关于内存管理的记录
- poj 2109 Power of Cryptography
- 【Tomcat】解决中文名图片无法下载
- 学习win7下搭建FTP服务器
- 经典SQL语句大全
- 汇编语言LEA和OFFSET区别
- MongoDB怎样插入数据
- svc 报错“由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射。“
- xilinx 时钟问题