我们首先了解一下我们Android的三级缓冲,内存缓冲、磁盘缓冲、网络缓冲(这样的一个加载速度,由快到慢)。那么三级缓冲的它的工作原理是什么呢?接下来,我们一起分析分析。
内存缓冲应该优先加载,它的速度是三级缓冲中最快的,本地其次,它的速度也很快,网络缓冲不应该首当其冲的作为加载方式,速度慢而且耗流量
问题来了,为什么还有优先级呢?是怎么样的一个运行机制?
解答: 三级缓冲,顾名思义,就是分三级的这样一个缓冲机制。每一个应用程序能够在成千上万的App中存活下来,不仅是因为它有一个很好的idea,更多的是要有一个良好的用户体验,话说得民心者得天下,eg:bta系列的产品,都得到很好的体验。那么怎么能做到很好的用户体验呢?第一点:功能强大。第二点:节省内存。第三点:节省流量。那么今天说的这个三级缓冲就是为了节省内存和流量出发的。大家都知道我们都是网络请求数据,尤其是做电商的,要请求很多图片,如果一个照片1M,那么我们只要浏览一个商品信息就要耗大量的流量了,还有我们的内存,所以引出了我们的三级缓冲。回到主题,当我们第一次进去的时候,会有一个if判断,查询一遍内存中是否有所需要的图片,如果没有,if再次判断,查询磁盘中是否有我们加载所需要的图片,再没有,只能走网络请求了,走了网络请求,我们会调用缓冲到内存,磁盘的方法,将数据缓冲下来。当我们第二次进入的时候,同上进行一系列的判断。当我们判断内存是否有数据的时候,因为之前已经存到内存中了,所以,取到我们想要的数据,然后进行一个return,将程序阻止向下运行。在原生的代码中及其复杂,各种方法,各种判断。所以就有大神封装了一些方法供我们使用,方便,快捷
方式有很多,比如ImageLoad图片加载方法、Glide图片加载方法。
今天着重介绍一下Glide方法的使用。其他就不多说了,直接我们上代码及其一些方式方法
*必要工作:导入依赖、添加网络权限
<uses-permission android:name="android.permission.INTERNET"/>'com.github.bumptech.glide:glide:3.7.0'
关键代码:Glide.with(this).load(imageUri).into(imageView);就这一行代码,我们就能够实现图片的一个加载
1.with(this) this可以是Fragment、Activity、Context
2.load(imageUri) load方法中放URI路径,可以加载本地图片、应用资源、二进制流、Uri对象
3.into()就是将请求回来的资源添加到控件中。
4.占位图:.placeholder(R.drawable.loading) 注:loading为资源文件
5.禁止Glide图片缓冲: .diskCacheStrategy(DiskCacheStrategy.NONE)
6.加载失败后显示的图片(异常占位):.error(R.drawable.error)
7.Glide默认可以自动去判断是静态还是GIF。如果想让动图为禁止的话,用.asBitmap()只显示第一帧的图
8.让静图强制实现动图的效果:asGif()
9.图片的大小:Glide会自动根据ImageView的大小来决定图片的大小.override(100, 100)
给大家推荐俩篇大神郭霖的文章链接
源码地址:http://blog.csdn.net/guolin_blog/article/details/53939176
深入探究Glide的缓存机制 :http://blog.csdn.net/guolin_blog/article/details/54895665
上边涉及到请求本地图片、应用资源、二进制、URI对象,下边的代码是实现方式
// 加载本地图片
File file = new File(getExternalCacheDir() + "/image.jpg");
Glide.with(this).load(file).into(imageView);
// 加载应用资源
int resource = R.drawable.image;
Glide.with(this).load(resource).into(imageView);
// 加载二进制流
byte[] image = getImageBytes();
Glide.with(this).load(image).into(imageView);
// 加载Uri对象
Uri imageUri = getImageUri();
Glide.with(this).load(imageUri).into(imageView);