首先说明Android中图片的存在形式: 1:文件形式:二进制形式存在与硬盘中。 2:流的形式:二进制形式存在与内存中。 注:文件形式和流的形式:对图片体积大小并没有影响。也就是说,如果你手机SD卡上的图片通过流的形式读到内存中,在内存中的大小也是原图的大小 3:Bitmap的形式:图片占用的内存会瞬间变大。
另外:当程序占用了过高的内存就容易出现OOM(OutOfMemory)异常。而涉及到图片处理的时候就经常会遇到oom的异常(out of memory)。我们可以通过下面的代码看出每个应用程序最高可用内存是多少。 1. int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024); 2. Log.d("TAG", "Max memory is " + maxMemory + "KB"); 涉及图片处理时,经常会用到BitmapFactory这个类,这个类提供了多个解析方法(decodeByteArray, decodeFile, decodeResource等)用于创建Bitmap对象,我们应该根据图片的来源选择合适的方法。 如:SD卡中的图片可以使用decodeFile方法, 网络上的图片可以使用decodeStream方法, 资源文件中的图片可以使用decodeResource方法。这些方法会尝试为已经构建的bitmap分配内存,这时就会很容易导致OOM出现。为此每一种解析方法都提供了一个可选的BitmapFactory.Options参数,将这个参数的inJustDecodeBounds属性设置为true就可以让解析方法禁止为bitmap分配内存,返回值也不再是一个Bitmap对象,而是null。虽然Bitmap是null了,但是BitmapFactory.Options的outWidth、outHeight和outMimeType属性都会被赋值。这个技巧让我们可以在加载图片之前就获取到图片的长宽值和MIME类型新闻热点
疑难解答