赞
踩
Android上内存优化可以做的有很多,其中图片的内存优化往往是最先考虑的几个方面之一,主要源于图片的内存占用多。
项目中普遍使用的都是png图片,png图片是支持透明度的,而对于一些没有用到透明度的场景,这部分内存是一样会加载,造成额外的内存开销。
一张图片,去掉透明度的方式加载(8888换成565),内存占用降低一半。
对于带有透明度的图片,统一通过Hardware方式加载。
如果是用Glide图片框架的,可以通过以下方式设置
RequestOptions options.set(Downsampler.ALLOW_HARDWARE_CONFIG, true);
Demo上测试通过普通方式和Hardware方式加载一张全屏的图片作为对比,
哪些情况不能使用HARDWARE?
在显存中存储像素数据意味着这些数据不容易访问到,在某些情况下可能会发生异常。已知的情形列举如下:
• 在 Java 中读写像素数据,包括:
• Bitmap#getPixel
• Bitmap#getPixels
• Bitmap#copyPixelsToBuffer
• Bitmap#copyPixelsFromBuffer
• 在本地 (native) 代码中读写像素数据
• 使用软件画布 (software Canvas) 渲染:
Canvas canvas = new Canvas(normalBitmap)
canvas.drawBitmap(hardwareBitmap, 0, 0, new Paint());
• 在绘制位图的 View 上使用软件层 (software layer type) (例如,绘制阴影)
ImageView imageView = …
imageView.setImageBitmap(hardwareBitmap);
imageView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。