在学习Glide 的过程中,有些值得注意的地方,在此记录一下
1. 在使用Glide加载网络图片时,注意加上网络权限:
<uses-permission android:name="android.permission.INTERNET"/>
2. 从Android9开始,默认禁止明文传输; 若请求http,注意在Manifest中配置上允许明文传输
android:usesCleartextTraffic="true"
还有另外一种方法,就是在 Res目录下新建xml文件夹,并在内部新建一个xml的配置文件,文件名自定义
1 <?xml version="1.0" encoding="utf-8"?> 2 <network-security-config> 3 <base-config cleartextTrafficPermitted="true" /> 4 </network-security-config>
之后在Manifest中配置上安全配置
android:networkSecurityConfig="@xml/netsecurity"
3. ** 如果上述二项配置好以后,仍不能加载图片,请一定要卸载APP,再重新安装 **
======================================================================
基于上述原因和对Glide的使用需求,在这次随笔中,记录下Glide的相关使用规则
1. Glide的缓存资源
- 1.原图(SOURCE) :原始图片
- 2.处理图(RESULT) :经过压缩和变形等处理后的图片
2. Glide的缓存策略
a. 内存缓存策略 : skipMemoryCache( Boolean )
Glide默认在内存中缓存处理图(Result);通过 skipMemoryCache 来设置是否要跳过内存缓存
True: 跳过内存缓存;不在内存中缓存结果图;
False:不跳过内存缓存;
调用skipMemoryCache(false)没有代码上的意义,因为Glide默认就是不跳过内存缓存的,
但是显示调用这个方法,可以让别人一目了然的知道你这次请求是会在内存中缓存的,所以还是建议显示调用一下这个方法来表明你的内存缓存策略
b.磁盘缓存策略(diskCacheStrategy)
Glide磁盘缓存策略分为四种,默认的是RESULT(默认值这一点网上很多文章都写错了,但是这一点很重要):
1.ALL:缓存原图(SOURCE)和处理图(RESULT)
2.NONE:什么都不缓存
3.SOURCE:只缓存原图(SOURCE)
4.RESULT:只缓存处理图(RESULT) —默认值
c. 组合策略
和其它的三缓缓存一样,Glide的缓存读取顺序是: 内存-->磁盘-->网络
需要注意的是Glide的内存缓存和磁盘缓存的配置相互没有直接影响,所以可以同时进行配置
就是内存缓存与磁盘缓存相互间没啥关系,各玩各的
3.缓存大小及路径
3.1内存缓存最大空间
Glide的内存缓存其实涉及到比较多的计算,这里就介绍最重要的一个参数,就是内存缓存最大空间
内存缓存最大空间(maxSize)=每个进程可用的最大内存 * 0.4
(低配手机的话是: 每个进程可用的最大内存 * 0.33)
3.2磁盘缓存大小
磁盘缓存大小: 250 * 1024 * 1024(250MB)
/** 250 MB of cache. */
int DEFAULT_DISK_CACHE_SIZE = 250 * 1024 * 1024;
3.3磁盘缓存目录
磁盘缓存目录: 项目/cache/image_manager_disk_cache
String DEFAULT_DISK_CACHE_DIR = "image_manager_disk_cache";
4.清除缓存
4.1清除所有缓存
清除所有内存缓存(需要在Ui线程操作)
Glide.get(this).clearMemory();
清除所有磁盘缓存(需要在子线程操作)
Glide.get(MainActivity.this).clearDiskCache();
注:在使用中的资源不会被清除
4.2清除单个缓存
由于Glide可能会缓存一张图片的多个分辨率的图片,并且文件名是被哈希过的,所以并不能很好的删除单个资源的缓存,以下是官方文档中的描述
原文:https://www.cnblogs.com/jieling/p/15188300.html