Android加载大图(二)

来源:互联网 发布:windows nas 方案 编辑:程序博客网 时间:2024/05/10 13:23
int maxMemory=(int)(Runtim.getRuntime().maxMemory);

通过这行代码我们可以知道每个应用程序最高可用内存是多少,大部分手机是32M

图片有各种形状和大小,但在大多数情况下,这些图片都会大于我们程序所需要的大小,系统图片库里展示的图片都是用手机摄像头拍出来的,这些图片的分辨率会比我们手机屏幕的分辨率高很多。大家应该知道,我们编写的应用程序都是有一定内存限制的,程序占用了过高的内存就容易初心OOM,

Android计算一张图片所占内存大小:图片长*宽所占像素字节数,而像素字节Android中只有四种

1、alpha-8  占一个字节

2、ARGB-444 占2个字节

3、ARGB-8888占4个字节

4、RGB-565 占2个字节

ARGB  透明度  红色  绿色,蓝色

可以通过bitmap.setConfig(Bitmap.Config.ARGB_4444),

BitmapFactory这个类提供了很多解析方法,decodeByteArray.decodeFile,decodeResource等,我们应该根据图片的来源选择合适的方法,比如SD卡中的图片使用decodeFile

方法,网络图片可以使用decodeStrean方法,资源文件中的图片可以使用decodeResource方法,这些方法会为已经构建的bitmap分配内存,这时很容易出现OOM,为此,每一种解析方法都提供了一个可选的BitemapFactory.Options参数,将这个参数的inJustDecodeBounds属性设置为true就可以让解析方法金志伟bitmap分配内存,返回值也不再是个bitmapbitmap对象,而是null,虽然bitmap是null,但是BitemapFactory。Options的outWidth,outHeight和outMimeType属性都会赋值,这个技巧让我们可以再加载图片之前就获取到的图片的长宽值和mime类型,从而根据情况对图片进行压缩。




















0 0
原创粉丝点击