GlideBuilder
Posted bdmh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GlideBuilder相关的知识,希望对你有一定的参考价值。
从名字看,大家应该不会感到陌生,这是android中经常会遇到的Builder模式,它为Glide提供了默认的配置。
在《初始化:Glide.java》中提到了Glide实例创建的代码。
private static void initializeGlide(
@NonNull Context context, @Nullable GeneratedAppGlideModule generatedAppGlideModule)
initializeGlide(context, new GlideBuilder(), generatedAppGlideModule);
private static void initializeGlide(
@NonNull Context context,
@NonNull GlideBuilder builder,
@Nullable GeneratedAppGlideModule annotationGeneratedModule)
......
//获取Application级别的Context
Context applicationContext = context.getApplicationContext();
//Build模式创建Glide实例
Glide glide = builder.build(applicationContext);
......
//赋值给单例对象
Glide.glide = glide;
在initializeGlide方法中,会对builder进行初始设置以及运行用户进行干预。
RequestManagerRetriever.RequestManagerFactory factory =
annotationGeneratedModule != null
? annotationGeneratedModule.getRequestManagerFactory()
: null;
builder.setRequestManagerFactory(factory);
for (com.bumptech.glide.module.GlideModule module : manifestModules)
module.applyOptions(applicationContext, builder);
if (annotationGeneratedModule != null)
annotationGeneratedModule.applyOptions(applicationContext, builder);
annotationGeneratedModule 是可以通过注解方式,自动创建的,用户可以通过自定义的Module来设置一些选项或者注册自己的组件,比如使用自己的网络组件,这个后面会讲。
这个module也可以在Manifest文件中定义,所以会遍历manifest中定义的module
for (com.bumptech.glide.module.GlideModule module : manifestModules)
module.applyOptions(applicationContext, builder);
这些过程完成后,就会调用Builder的build方法创建Glide实例了。
Builder中包含以下可设置的属性。
//保存过场的map
private final Map<Class<?>, TransitionOptions<?, ?>> defaultTransitionOptions = new ArrayMap();
//实验性接口,记录轨迹,暂不用理会
private final GlideExperiments.Builder glideExperimentsBuilder = new GlideExperiments.Builder();
//用来加载和管理活动和缓存中资源的
private Engine engine;
//bitmap池子,用来复用图像的
private BitmapPool bitmapPool;
//数组池子,管理各种数组对象
private ArrayPool arrayPool;
//MemoryCache接口,管理缓存中资源的
private MemoryCache memoryCache;
//Glide执行任务的,处理不在缓存中的资源
private GlideExecutor sourceExecutor;
//Glide执行任务的,处理缓存中的资源
private GlideExecutor diskCacheExecutor;
//依然是处理缓存的,懒加载,具体由子类执行
private DiskCache.Factory diskCacheFactory;
//根据设备屏幕密度,width,height等信息,计算缓存大小
private MemorySizeCalculator memorySizeCalculator;
//监测网络连接
private ConnectivityMonitorFactory connectivityMonitorFactory;
//日志级别,默认Log.INFO
private int logLevel = 4;
//创建RequestManager,管理Glide的请求
private RequestManagerRetriever.RequestManagerFactory requestManagerFactory;
//Glide执行任务的,加载动画图像用
private GlideExecutor animationExecutor;
/**
* 是否保留活动的资源
* 默认:false
* true:加载的资源将不会被回收,即强引用
* false:弱引用
*/
private boolean isActiveResourceRetentionAllowed;
//图像加载监听的集合
private List<RequestListener<Object>> defaultRequestListeners;
Builder的工作就是对上面这些属性进行设置,并传递给Glide实例。
默认在创建Glide时,会初始化每一个对象。
Glide build(@NonNull Context context)
if (sourceExecutor == null)
sourceExecutor = GlideExecutor.newSourceExecutor();
if (diskCacheExecutor == null)
diskCacheExecutor = GlideExecutor.newDiskCacheExecutor();
if (animationExecutor == null)
animationExecutor = GlideExecutor.newAnimationExecutor();
if (memorySizeCalculator == null)
memorySizeCalculator = new MemorySizeCalculator.Builder(context).build();
if (connectivityMonitorFactory == null)
connectivityMonitorFactory = new DefaultConnectivityMonitorFactory();
......
Builder中的这些设置,我们都可以通过自定义的AppGlideModule子类的applyOptions方法进行设置。
以上是关于GlideBuilder的主要内容,如果未能解决你的问题,请参考以下文章
单列(写了池子pool)用list实现的方法, 与伪单例(写了池子zidianpool),用字典实现的方法,可以存入不同,i名字的物体
5分钟学会撤池子 薄饼pancakeswap教程 撤销流通池图文课程