一、Bitmap的基本概念
1.Bitmap是Android系统中处理图像的一个最重要的类
2.通过Bitmap我们可以获取图像的信息
3.获取到图片信息后,我们可以通过一些方法对其进行缩放、裁剪等操作
二、Bitmap的加载方式
1.BitmapFactory.decodeByteArray() :字节数组
2.BitmapFactory.decodeFile():文件
3.BitmapFactory.decodeResurece():资源ID
4.BitmaoFactory.decodeStream():数据流
三、为什么要高效的加载Bitmap?
1.防止内存溢出。
2.尽可能的节省内存开销。
3.使我们的APP运行的更加流畅。
四、BitmapFactory.options
属性:
1.inJustDecodeBounds 是一个boolean类型的变量,设置为true时,BitmapFactory.decode...并不会返回一个bitmap对象,而是返回bitmap的width和height。
2.outWidth和outHeight,返回的width和height会存放在对应这两个变量中。
3.inSampleSize 采样率。
示例
public class BitmapUtil {
/**
*
* @param filePath 图片路径
* @param pixlW 要显示的宽度
* @param pixlH 要显示的高度
* @return
*/
public static Bitmap getBitmap(String filePath,int pixlW,int pixlH){
BitmapFactory.Options options =new BitmapFactory.Options();
options.inJustDecodeBounds =true;
options.inPreferredConfig = Bitmap.Config.RGB_565;
//预加载
BitmapFactory.decodeFile(filePath,options);
//获取图片实际的宽和高
int raWidth = options.outWidth;
int raHeight = options.outHeight;
//计算inSampleSize
options.inSampleSize =getInSampleSize(raWidth,raHeight,pixlW,pixlH);
options.inJustDecodeBounds=false;
return BitmapFactory.decodeFile(filePath,options);
}
/**
* 计算inSampleSize
* @param raWidth
* @param raHeight
* @param pixlW
* @param pixlH
* @return
*/
private static int getInSampleSize(int raWidth,int raHeight,int pixlW,int pixlH) {
int sampleSize =1;//不压缩
float widthSample =0;
float heightSample =0;
if(raWidth>pixlW){
widthSample = raWidth/pixlW;
}
if(raHeight>pixlH){
heightSample = raHeight/pixlH;
}
sampleSize = (int) Math.max(widthSample,heightSample);
if(sampleSize<=0){
sampleSize =1;
}
return sampleSize;
}
}
五、Android缓存
1.缓存的概念
缓存就将从服务器请求到的数据(json,file)等保存到本地,这就是缓存。
2.缓存常见的使用场景和优势
使用场景:
1)对Bitmap和File等大数据进行缓存,不必每次都从服务器下载,尤其是ListView。
2)数据不需要实时更新,采用缓存机制。
优势
1)对于一些不是经常发生变化的数据,我们可以使用本地缓存,这样可以提高应用的响应速度。
2)不再频繁的请求服务器,降低服务器的负载压力。
3)特殊场景:离线阅读
3.缓存策略
1.android LruCache实现内存缓存。
2.android DiskLruCache硬盘缓存。
LruCache概念
1.Lru是计算机科学中使用的一种近期最少使用算法。
2.LruCache内部采用的是LinkedHashMap。
demo地址:https://github.com/wo5813288/SampleImageLoader