鉴于你的内存有限,我们可以比较理想的只让内存加载较低分辨率的版本。低分辨率版本应与显示它的UI组件的大小相符合。一个高分辨率的图像不提供任何可显示的适配,但仍依然会占用更多的珍贵的内存资源,会带来额外的性能开销上的剧烈增加。
这节课带你浏览解码大型位图并且可以不超过每个应用程序的内存限制而通过在内存中使用一个较小的采样版本加载。
读取位图的尺寸和类型
BitmapFactory类提供了这几种解码方法:decodeByteArray(),decodeFile(),decodeResource(), 等等.从不同的来源创建Bitmap位图对象, 要选择最适合于你的图像数据源的解码方法。 因为可以很容易地触发OutOfMemory异常. 每种类型的解码方法具有额外的标志来使用特定BitmapFactory.Options解码方式。在解码时通过设置inJustDecodeBounds属性为true来防止内存分配。当位图对象没有设置outWidth, outHeight和outMimeType的时候,会返回。这种技巧能够让你读取尺寸和位图在构建前的图像数据(和内存分配)。null
BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeResource(getResources(), R.id.myimage, options); int imageHeight = options.outHeight; int imageWidth = options.outWidth; String imageType = options.outMimeType;