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 图片的