android系列:Bitmap的生成流程之BitmapFactory.decodeResource VS BitmapFactory.decodeStream
来源:互联网 发布:手机淘宝微淘设置 编辑:程序博客网 时间:2024/06/07 11:19
转自:点击打开链接
BitmapFactory.decodeResource和BitmapFactory.decodeStream,相信对于有过android app开发经验的人来说都是很熟悉了。关于Bitmap的OOM问题,网上也有很多文章进行了分析,不少文章都说为避免OOM,最好使用BitmapFactory.decodeStream,但是具体说明原因的我至今没有找到,所以趁着10.1期间有空,就调查了一番,希望结果对大家能有帮助。
先来张时序图,看了这张图,估计很多问题都不用说明了:
下面做些说明:
1,函数externalBytesAvailable(...)的内存计算方法详细请参见文章《Android Bitmap内存限制》;
2,Bitmap.createScaledBitmap时可能会对Bitmap进行缩放,缩放所使用的Options请参见下面这段代码:
- public static Bitmap decodeResourceStream(Resources res, TypedValue value,
- InputStream is, Rect pad, Options opts) {
- if (opts == null) {
- opts = new Options();
- }
- if (opts.inDensity == 0 && value != null) {
- final int density = value.density;
- if (density == TypedValue.DENSITY_DEFAULT) {
- opts.inDensity = DisplayMetrics.DENSITY_DEFAULT;
- } else if (density != TypedValue.DENSITY_NONE) {
- opts.inDensity = density;
- }
- }
- if (opts.inTargetDensity == 0 && res != null) {
- opts.inTargetDensity = res.getDisplayMetrics().densityDpi;
- }
- return decodeStream(is, pad, opts);
- }
3,BitmapFactory.decodeResource比起BitmapFactory.decodeStream来说,在没有参数Options opts的情况下,确实是多占用了内存,因为多了BitmapFactory.finishDecode这一步,这里多了一个Bitmap.createScaledBitmap操作;
4,关于使用BitmapFactory.decodeResource和BitmapFactory.decodeStream的效率对比,大家可以参见文章《Android 内存优化测试》
5,关于文章《Android 内存优化测试》提到的使用BitmapDrawable是最节省内存的方法,原因是frameworks\base\core\java\android\content\res\Resources.java对Bitmap做了缓存处理,文中所有的array其实都是指向同一个Bitmap,这一点也可以通过Bitmap.toString的输出信息来证明。
备注:时序图看不清楚的,可以到http://download.csdn.net/detail/imyfriend/4617329下载原图。
0 0
- android系列:Bitmap的生成流程之BitmapFactory.decodeResource VS BitmapFactory.decodeStream
- Bitmap的生成流程之BitmapFactory.decodeResource VS BitmapFactory.decodeStream
- Bitmap的生成流程之BitmapFactory.decodeResource VS BitmapFactory.decodeStream
- Bitmap的生成流程之BitmapFactory.decodeResource VS BitmapFactory.decodeStream
- (转)Bitmap的生成流程之BitmapFactory.decodeResource VS BitmapFactory.decodeStream
- Android: BitmapFactory.decodeResource BitmapFactory.decodeStream区别
- BitmapFactory.decodeStream()与BitmapFactory.decodeResource()
- BitmapFactory decodeResource and decodeStream 's problem
- BitmapFactory类decodeResource与decodeStream方法比较
- BitmapFactory.decodeResource的参数
- BitmapFactory.decodeResource
- BitmapFactory.decodeResource
- BitmapFactory.decodeResource
- Android-BitmapFactory.decodeResource OOM问题
- Android图片之Bitmap、BitmapFactory
- android BitmapFactory的OutOfMemoryError: bitmap ...
- Android编程之BitmapFactory.decodeResource加载图片缩小的原因及解决方法
- Android图形图像处理之Bitmap和BitmapFactory
- 了解 TCP 系统调用序列
- 黑马程序员_String对象
- 谷歌新计划:跟“404 Not Found”说拜拜
- android设计指南非官方中文版(apkbus)
- Struts2环境搭建
- android系列:Bitmap的生成流程之BitmapFactory.decodeResource VS BitmapFactory.decodeStream
- Qt-5.3.2 在友善Smart210开发板的移植记录
- 30多年程序员生涯经验总结
- 涉足计算机视觉领域要知道的~ (part1)
- Mvc参数的传递AD0.NET
- (Nginx) URL REWRITE
- 音频的参数--采样位数、采样频率
- 初识 PS CS6(三)___旋转与缩放图像
- Java 的Class 类