[精]android图片加载机制和缓存机制 【待丰富中】

1: android 如果之前加载过这个照片,那么是会复用的,如果没有,那么会创建的

图片的大小的计算像素1024*1024的话,内存所占用的大小是1024*1024*4(这里面的4,就是我们rgb的那个值+透明度),这里就是4MB, 注意这里是大B

 

2: 图片内存的占用空间和像素有关是一个定值,多大的像素占用的内存值是固定的,但是磁盘的占用空间是不一样的,相同的像素占用的磁盘空间不一定相同,例如我们的桌面的大小都是一样的,但是桌面的不同的截图,它们的大小就是不一样的,这个和里面的颜色等等都是有关系的

 

3: android 的图片的处理包括三个部分:

3.1:图片的加载,这里面涉及到了就是图片的分辨率的适配,

我们没有必要给一个100px*100px的图片去加载一个1024*1024像素的图片,需要将1024*1024的分辨率调整到100*100,原来1024*1024所占用的内存空间是4MB,

现在40*40的占用的40KB, 是原来的100分之一的内存,节省了很多内存啊,

如果图片是很多,例如达到了18个,那么我们节省的内存空间,就接近70MB,这个是相当大的空间了

public void showPic(View view) {

    ImageView imageView = (ImageView) findViewById(R.id.imageView);

    BitmapFactory.Options options = new BitmapFactory.Options();

    Resources resources = getResources();

    //可以查看一下,原始的大小,注意,这个原始的大小和我们放的文件夹也是有关系的。
    Bitmap bitmap = BitmapFactory.decodeResource(resources, R.mipmap.big, options);
    int widthOld = bitmap.getWidth();
    int heightOld = bitmap.getHeight();

    //这里我们固定采样率
    options.inSampleSize = 32;

    bitmap = BitmapFactory.decodeResource(resources, R.mipmap.big, options);

    int width = bitmap.getWidth();
    int height = bitmap.getHeight();
    //可以查看我们的内存占用多少

    int byteCount = bitmap.getByteCount();
    Toast.makeText(this,"heigthOld = " + heightOld + " widthOld = " +widthOld + "heigth = " + height + " width = " +width + " byteCount = " + byteCount,Toast.LENGTH_LONG).show();


    imageView.setImageBitmap(bitmap);


}

3.2 图片的缓存,这个其实说白了就是为了给客户省流量,我们其实可以直接从网络来下载的,但是考虑到客户的流量,我们采用了图片的缓存

3.3 图片的

发布了616 篇原创文章 · 获赞 258 · 访问量 250万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览