栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Glide设计模式之建造者(builder)模式2【RequestBuilder】

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Glide设计模式之建造者(builder)模式2【RequestBuilder】

Glide多种组合使用方式记录–没有全部亲测,大家可以根据实际需要选用
Glide设计模式之建造者(builder)模式1【GlideBuilder】
Glide设计模式之建造者(builder)模式2【RequestBuilder】
Glide设计模式之建造者(builder)模式3【RequestOptions】【baseRequestOptions】
Glide设计模式之建造者(builder)模式4总结【MemorySizeCalculator】【GlideExecutor】【PreFillType】【LazyHeaders】

官方定义

Glide设计模式之builder模式1【GlideBuilder】已经有过builder模式的相关介绍和说明这里就不重复了。没有看过的可以看看之前的GlideBuilder篇!

使用形式
//第一种 官方形式
Glide.with(fragment).load(url).into(imageView);
//第二种 单元测试形式
Glide.with(app)
            .asBitmap()
            .diskCacheStrategy(DiskCacheStrategy.RESOURCE)
            .skipMemoryCache(true)
            .override(targetSize)
            .load(resourceId)
            .listener(
                new RequestListener() {
                 。。。)
            .submit();
 //第三种形式
Bitmap bitmap =
        concurrency.get(
            Glide.with(context).asBitmap().load(getDataUri(CompressFormat.JPEG)).submit())

从源码的角度即可看出调用的顺序和规律。前面涉及GlideBuilder构造,后面就是RequestBuilder接着就是into(imageView)待加载的目标了。

RequestBuilder

com.bumptech.glide.RequestBuilder
下面列出返回RequestBuilder的公共调用设置

@NonNull

   将给定的选项应用于请求。
与baseRequestOptions.apply(baseRequestOptions)一样,#apply只替换给定RequestOptions对象中显式设置的值。如果你需要完全重置所有之前设置的选项,创建一个新的RequestBuilder而不是使用这个方法。

覆盖:
应用在类baseRequestOptions>
返回:
这个请求构建器。
参见:
baseRequestOptions.apply (baseRequestOptions)
  @NonNull
  @CheckResult
  @Override
    public RequestBuilder apply(@NonNull baseRequestOptions requestOptions) {
。。。

   设置TransitionOptions,以便在加载完成时从占位符或缩略图进行转换。
给定的TransitionOptions将替换之前设置的任何TransitionOptions。
返回:
这个请求构建器。
  @NonNull
  @CheckResult
  public RequestBuilder transition(
      @NonNull TransitionOptions transitionOptions) {
      ...
 
   设置一个RequestListener来监视资源加载,并删除所有以前设置的侦听器(通过这个方法或从addListener(RequestListener)。要设置多个监听器,请使用
addListener代替。
*
* @param requestListener要使用的请求监听器。
* @return此请求生成器。
  @NonNull
  @CheckResult
  @SuppressWarnings("unchecked")
  public RequestBuilder listener(
      @Nullable RequestListener requestListener) {
      ...
 
   将RequestListener添加到列表中,该列表将按照请求结束时添加的顺序调用。

对该方法的多次调用会附加额外的监听器。以前的侦听器不会被删除。如果你想替换之前添加的监听器,使用#listener(RequestListener)

监听器跟踪由这个特定的生成器When启动的请求的状态 使用缩略图api (#thumbnail(RequestBuilder)),这可能开始看起来 之所以令人困惑,是因为有多个请求正在运行,每个请求都可能成功或失败,独立于 对方。作为规则,Glide不会将RequestListeners添加到缩略请求中 自动。这意味着RequestListeners只跟踪一个请求的状态 在链。例如,如果您用一个嵌套的缩略图和开始一个主请求 添加RequestListeneronly到主请求,然后添加RequestListener 仅在主请求成功或失败时才会得到通知。如果缩略图成功, 但是主请求失败,添加到主请求的requestlistener将失败 仍然被RequestListener#onLoadFailed(GlideException, Object, Target, 在相同的场景中,requestlistener只添加到主请求 将没有RequestListener#onResourceReady(对象,对象,目标,数据源, 当缩略图请求成功完成时调用。类似地,如果加上a RequestListener只对缩略请求,而不是主请求 侦听器只会在与缩略图请求相关的更改时被调用。如果缩略图 请求失败,添加到缩略图请求的侦听器将立即被调用 通过RequestListener#onLoadFailed(GlideException, Object, Target, boolean),即使 主要请求最终可能会成功。完全有可能加一个 RequestListener同时用于主请求和缩略请求。如果你这样做, RequestListener将在每个请求完成时被独立地调用。请记住 如果任何父请求在其缩略请求之前完成,它将尝试取消 这些请求。因此,不能保证将RequestListener添加到 缩略图请求将实际调用,成功或失败。这些相同的模式 保持为任意嵌套的缩略图。侦听器只对它的请求调用 添加到每个缩略图请求,如果这些请求被取消,这些请求可能不会被调用 由于父请求的完成。 目标#onLoadFailed(Drawable)将只被调用,如果链中的每个请求,包括 主请求失败,您可以使用它来触发您的回退行为。一定要选一个 适当的目标子类,如 com.bumptech.glide.request.target.BitmapImageViewTarget或 当加载到ImageView时,drawableimageviewtarget 或com.bumptech.glide.request.target.CustomTarget时使用自定义呈现。不 忘记在ImageViewTargets中调用super()。 最好为每一种请求类型(通常)创建一个异常处理程序实例 Activity /fragment)而不是在每个请求中传递一个,以避免一些冗余对象 分配。 @param requestListener要使用的请求监听器。如果为空,则此方法为noop。 这个请求生成器。 @NonNull @CheckResult public RequestBuilder addListener( @Nullable RequestListener requestListener) { ... 设置一个RequestBuilder,如果由该RequestBuilder启动的加载失败,该RequestBuilder将被构建并运行。 如果这个RequestBuilder使用一个缩略图成功,给出的错误RequestBuilder将启动无论如何,如果非缩略图请求失败。 对于给定的错误RequestBuilder,此方法的递归调用以及对缩略图(float)和缩略图(RequestBuilder)的调用都被支持。 不像缩略图(RequestBuilder)和缩略图(浮动),没有选项从这个主要的RequestBuilder传播到给定的错误RequestBuilder。像优先级、覆盖宽度和高度以及转换等选项必须独立应用于错误构建器。 给定的RequestBuilder将启动并潜在覆盖一个回退绘制,如果它通过baseRequestOptions.fallback(android.graphics.drawable.Drawable)或baseRequestOptions.fallback(int)设置在这个RequestBuilder上。 返回: 这RequestBuilder。 @NonNull public RequestBuilder error(@Nullable RequestBuilder errorBuilder) { ... 相同的调用#错误(RequestBuilder)的RequestBuilder是 调用#clone()并删除任何现有缩略图的结果和错误 RequestBuilders。

除了缩略图和错误RequestBuilders,这是删除的,所有其他选项 从主要请求中保留。然而,< b >订单事宜!后应用的任何选项 调用此方法将不会应用于错误RequestBuilder。

警告:调用该方法时使用的模型的类型与 传递给load()的模型可能是危险的!各种各样应用的任何选项 特定类型的load()方法,如#load(byte[])将被复制到错误中 在这里请求,即使你传递给这个方法的模型不匹配。同样,选择 通常由特定类型的load()方法应用的将是而不是 be 适用于此请求。如果这种行为令人困惑或出乎意料,请使用 # (RequestBuilder)而不是错误。 @NonNull @CheckResult public RequestBuilder error(Object model) { ... 加载并显示由给定的缩略图请求检索的资源(如果它在此请求之前完成)。最好用于加载较小的缩略图资源,将比加载完整大小的资源更快。并不能保证请求实际完成的顺序。但是,如果thumb请求在完整请求之后完成,则thumb资源将永远不会替换完整资源。 支持对缩略图的递归调用。 覆盖之前对该方法的任何调用,缩略图(浮动)和缩略图(RequestBuilder[])。 参数: thumbnailRequest—用来加载缩略图的请求。 返回: 这个请求构建器。 参见: 缩略图(浮动),缩略图(RequestBuilder []) @NonNull @CheckResult @SuppressWarnings("unchecked") public RequestBuilder thumbnail( @Nullable RequestBuilder thumbnailRequest) { ... 递归应用缩略图(RequestBuilder),以便RequestBuilder加载的缩略图在给定的优先级顺序。 缩略图的顺序(RequestBuilder)是应用在位置0,这样RequestBuilder RequestBuilder在位置1应用使用其缩略图的方法,在位置1 RequestBuilder RequestBuilder位置2应用使用其缩略图方法等等。 用一个空的RequestBuilder缩略图数组或一个空的RequestBuilder缩略图数组调用这个方法等同于用null调用thumbnail(RequestBuilder)。 这里提供的缩略图数组中的任何单独的RequestBuilder都可能是空的。RequestBuilders被忽略,并被排除在递归链中。 这里提供的RequestBuilder对象可能会发生突变,并覆盖之前对该方法或缩略图(RequestBuilder)方法的任何调用。 覆盖任何先前对thumbnail(RequestBuilder), thumbnail(float)和这个方法的调用。 返回: 这个请求构建器。 参见: 缩略图(浮动),缩略图(RequestBuilder) @SuppressWarnings({"CheckResult", "unchecked"}) @NonNull @CheckResult public RequestBuilder thumbnail( @Nullable RequestBuilder... thumbnails) { ... 同上 @SuppressWarnings({"CheckResult", "unchecked"}) @NonNull @CheckResult public RequestBuilder thumbnail( @Nullable List> thumbnails) { ... 以与此请求相同的方式加载资源,只是目标的维度乘以给定的大小乘数。如果缩略图加载在完整尺寸加载之前完成,缩略图将显示出来。如果缩略图加载完成后,全尺寸加载,缩略图将不会显示。 注意:缩略图资源将小于请求的大小,所以目标(或ImageView)必须能够适当地缩放缩略图。看到ImageView.ScaleType。 几乎所有选项都将从原始加载中复制,包括ModelLoader、ResourceDecoder和transforms。然而,baseRequestOptions.placeholder(int)和baseRequestOptions.error(int),以及listener(RequestListener)将只用于完整大小加载,不会复制缩略图加载。 支持对缩略图的递归调用。 覆盖之前对该方法的任何调用,缩略图(RequestBuilder[])和缩略图(RequestBuilder)。 参数: sizeMultiplier—加载缩略图时应用于目标尺寸的乘数。 返回: 这个请求构建器。 参见: RequestBuilder缩略图,缩略图(RequestBuilder []) @deprecated 这个方法和#thumbnail(RequestBuilder)之间的行为差异 都很微妙,用户很难理解,开发人员也很难维护。看到 javadoc上的#listener(RequestListener)的一个具体的行为例子 这种方法的差异和复杂性。更好的一致性和可读性 可以通过调用#thumbnail(RequestBuilder)与一个副本{@code RequestBuilder上,你已经调用baseRequestOptions#sizeMultiplier(float)。 在实践中,这种方法也不是特别有用。更常见的是想要 为缩略图指定多个不同的属性,而不仅仅是一个简单的百分比 修改器的目标大小,所以没有什么理由保留这个方法。这 方法将在未来版本的Glide中删除。 @NonNull @CheckResult @SuppressWarnings("unchecked") @Deprecated public RequestBuilder thumbnail(float sizeMultiplier) { ... 设置要加载数据的特定模型。 参数: model—要加载数据的模型,或为空。 返回: 这个请求构建器。 @NonNull @CheckResult @SuppressWarnings("unchecked") @Override public RequestBuilder load(@Nullable Object model) { ... 返回一个对象来加载给定的位图。 允许Glide加载位图比将位图传递到Glide中要好得多。如果你有一个自定义的方法来获取bitmap,而这个方法是Glide默认不支持的,考虑注册一个自定义的ModelLoader或ResourceDecoder,而不是使用这个方法。 DiskCacheStrategy设置为DiskCacheStrategy. none。以前调用apply(baseRequestOptions)或以前应用的DiskCacheStrategys将被此方法覆盖。应用非DiskCacheStrategy的DiskCacheStrategy。在调用此方法之后,NONE可能会导致未定义的行为。 在内存中缓存依赖于对象相等。位图的内容不进行比较。 @NonNull @CheckResult @Override public RequestBuilder load(@Nullable Bitmap bitmap) { ... 返回一个请求构建器来加载给定的Drawable。 让Glide加载位图总是比用这种方法将位图传递给Glide要好。如果你有一个自定义的方法来获取bitmap,而这个方法是Glide默认不支持的,考虑注册一个自定义的ModelLoader或ResourceDecoder,而不是使用这个方法。 DiskCacheStrategy设置为DiskCacheStrategy. none。以前调用apply(baseRequestOptions)或以前应用的DiskCacheStrategys将被此方法覆盖。应用非DiskCacheStrategy的DiskCacheStrategy。在调用此方法之后,NONE可能会导致未定义的行为。 在内存中缓存依赖于对象相等。可绘制表的内容不进行比较。 @NonNull @CheckResult @Override public RequestBuilder load(@Nullable Drawable drawable) { ... 返回一个请求构建器来加载给定的String。 注意:这个方法只使用给定的String作为缓存键来缓存数据。如果数据是一个您无法控制的Uri,或者您希望给定String所表示的数据在不改变String标识符的情况下改变,考虑使用baseRequestOptions.signature(com.bumptech.glide.load.Key)来混合您创建的一个签名,该签名识别当前给定String中的数据,如果数据更改,该签名将使缓存无效。另外,使用DiskCacheStrategy。NONE和/或baseRequestOptions.skipMemoryCache(boolean)可能是合适的。 参数: 一个文件路径,或者UriLoader处理的uri或url。 @NonNull @Override @CheckResult public RequestBuilder load(@Nullable String string) { ... 返回一个请求构建器来加载给定的Uri。 注意:这个方法只使用Uri本身作为缓存键来在Uri中缓存数据。来自某些内容提供者的Uri表示的数据可能会发生变化,而Uri不会发生变化,这意味着使用这种方法可能会导致显示陈旧的数据。考虑使用baseRequestOptions.signature(com.bumptech.glide.load.Key)来混合一个基于给定Uri上的数据创建的签名,如果数据改变,该签名将使缓存无效。另外,使用DiskCacheStrategy。NONE和/或baseRequestOptions.skipMemoryCache(boolean)可能是合适的。 参数: uri -表示图像的uri。必须是UriLoader处理的类型。 @NonNull @CheckResult @Override public RequestBuilder load(@Nullable Uri uri) { ... 返回一个请求构建器来加载给定的File。 注意:这个方法只使用文件路径本身作为缓存键来缓存文件数据。File中的数据可能会更改,因此使用此方法可能会导致显示陈旧的数据。如果你希望文件中的数据发生改变,考虑使用baseRequestOptions.signature(com.bumptech.glide.load.Key)来混合一个你创建的签名来识别当前文件中的数据,如果数据发生改变,缓存将会失效。另外,使用DiskCacheStrategy。NONE和/或baseRequestOptions.skipMemoryCache(boolean)可能是合适的。 参数: file—包含图像的文件 @NonNull @CheckResult @Override public RequestBuilder load(@Nullable File file) { ... 返回一个请求生成器,该生成器使用当前注册的ModelLoaderFactory或Integer加载由给定的Integer资源id表示的图像。默认为ResourceLoader来加载资源id模型。 默认情况下,该方法会向用于在Glide中缓存该资源的缓存键添加版本代码和基于夜间模式的签名。这个签名足以保证终端用户将看到最新版本的画板,但在开发过程中如果你不增加您的版本代码之前你们每个安装和替换可拉的有不同的数据没有改变可拉的名字,你会看到不一致的缓存数据。要解决这个问题,可以考虑使用DiskCacheStrategy。在开发过程中,通过baseRequestOptions.diskCacheStrategy(com.bumptech.glide.load.engine.DiskCacheStrategy),重新启用默认的DiskCacheStrategy。发布构建的资源。 该方法将加载非位图资源,如VectorDrawables。虽然Glide尽了最大的努力,通过提取底层的位图或者将绘制图转换为位图,来将转换应用到这些可绘制图上,但是Glide仍然不能转换所有类型的资源。动画Drawables不能被转换(GifDrawable除外)。为了避免加载失败,如果一个Drawable不能被转换,使用可选的转换方法,如baseRequestOptions。optionalTransform(类、转换)。 在某些情况下,将可绘制图转换为位图可能是低效的。使用这种方法,特别是与转换结合使用时,要注意非位图绘制。 @NonNull @CheckResult @Override public RequestBuilder load(@RawRes @DrawableRes @Nullable Integer resourceId) { ... 弃用。URL类有许多性能问题,通常应该尽可能避免使用。最好是load(android.net.Uri)或load(String)。 返回一个请求构建器来加载给定的URL。 @Deprecated @CheckResult @Override public RequestBuilder load(@Nullable URL url) { ... 返回加载给定字节数组的请求。 注意:默认情况下,字节的加载不会缓存在内存或磁盘缓存中。 参数: 模型——要加载的数据。 @NonNull @CheckResult @Override public RequestBuilder load(@Nullable byte[] model) { .... @SuppressWarnings({ // we don't want to throw to be user friendly "PMD.CloneThrowsCloneNotSupportedException" }) 返回该请求构建器的副本,其中包含到目前为止放置在该构建器上的所有选项。 这个方法返回一个“深”复制,因为所有不可变参数都被复制,这样一个构建器的更改将不会影响另一个构建器。然而,除了不可变参数外,当前模型不会被复制复制,因此对模型的更改将影响两个构建器。 覆盖: 克隆类baseRequestOptions> @CheckResult @Override public RequestBuilder clone() { ...

补充说明
   设置加载资源的目标。
参数:
target—加载资源的目标。
返回:
给定的目标。
  @NonNull
  public > Y into(@NonNull Y target) {
  ...
 
   返回一个future,该future可用于在后台线程上执行阻塞获取。
参数:
width -期望的宽度,以像素为单位,或者Target.SIZE_ORIGINAL。这将被baseRequestOptions覆盖。如果先前调用,重写(int, int)。
height -期望的高度,以像素为单位,或Target.SIZE_ORIGINAL。这将被baseRequestOptions覆盖。如果先前调用,重写(int, int)})。
  @NonNull
  public FutureTarget submit(int width, int height) {
  ...
 
   使用给定的宽度和高度将资源预加载到缓存中。
预加载对于确保您在不久的将来能够快速获得所需的资源非常有用。

参数:
width -期望的宽度,以像素为单位,或者Target.SIZE_ORIGINAL。这将被baseRequestOptions覆盖。如果先前调用,重写(int, int)。
height -期望的高度,以像素为单位,或Target.SIZE_ORIGINAL。这将被baseRequestOptions覆盖。如果先前调用,重写(int, int)})。

注意:任何在主请求之前未完成的缩略图请求将被
已取消,可能无法成功预加载。取消后的突出缩略图
主请求成功是所有Glide请求的常见行为。我们并不想这么做
在这里阻止这种行为。如果你绝对需要将所有缩略图单独预加载,
为每个缩略图创建单独的preload()请求(您仍然可以将它们合并到一个调用中)
当在后续请求中将图像加载到UI中时)。

@param width期望的像素宽度,或者目标#SIZE_ORIGINAL。这将是
由com.bumptech.glide.request覆盖。RequestOptions #覆盖(int, int)
之前调用。
@param height期望的高度(像素),或者目标#SIZE_ORIGINAL。这将是
由com.bumptech.glide.request覆盖。RequestOptions #覆盖(int, int)
以前叫)。
一个可以用来取消加载的目标
RequestManager #清晰(目标)。
@see com.bumptech.glide.ListPreloader
  @NonNull
  public Target preload(int width, int height) {
  ...
  
   使用Target将资源预加载到缓存中。SIZE_ORIGINAL作为目标宽度和高度。相当于用Target调用preload(int, int)。SIZE_ORIGINAL作为宽度和高度。
返回:
一个可以通过RequestManager.clear(Target)来取消加载的目标
  @NonNull
  public Target preload() {
  ...
 
   弃用。使用RequestManager.downloadOnly()和到(目标)。
将原始未修改的数据加载到缓存中,并使用缓存文件调用给定的Target。
类型参数:
Y -目标的类型。
参数:
target—加载完成时将接收缓存文件的目标
返回:
给定的目标。
  @Deprecated
  @CheckResult
  public > Y downloadOnly(@NonNull Y target) {
  ...
  
   弃用。使用RequestManager.downloadOnly()并提交(int, int)。
将原始未修改的数据加载到缓存中,并返回一个Future,该Future可用于检索包含该数据的缓存文件。
参数:
width -用来获取数据的像素宽度。
height—用于获取数据的像素高度。
返回:
一个Future,可以用来检索包含数据的缓存文件。
  @Deprecated
  @CheckResult
  public FutureTarget downloadOnly(int width, int height) {
  ...

小计

RequestBuilder 的起到了请求配置和应用目标的作用。在完成GlideBuilder的构建配置过程后接着进行RequestBuilder配置构建。接着进行into返回进行应用。这个风格和node.js里那种{}.then(…).then(…).catch(…)这样的链式比较相似。

Glide.with(fragment).load(url).into(imageView);
这样的代码风格集配置构建数据请求应用于一行的方式很简洁。类比需要new几个对象然后彼此设置,接着再拉出数据结果进行回调应用到UI上。这样的使用方式丝滑很多。

建议:
如果在工程中有这样配置构建环境、配置构建数据拉取请求、配置构建应用数据列表的结构。即可考虑使用这样的方式。作者本人在解析这个结构的时候发现其实它用在listview里也是个不错的选择:Activity构建环境、网络或者数据库或者数据文件的数据请求配置、接着应用于UI列表里。这个因为listview的子项自定义程度比较高,所以通用的抽象结构比较难推广的其他项目工程。但如果本工程子项相似度高还是可以试试这样的结构的。至少看完本篇完成这个练习。拿出来吹嘘逼格也高了不少哦!

附录1相关类说明 com.bumptech.glide.TransitionOptions
 

一个基类,用于设置加载完成时在资源上使用的转换。

com.bumptech.glide.request.target.BitmapImageViewTarget


可以在ImageView中显示Bitmap的目标。 com.bumptech.glide.request.target.DrawableImageViewTarget


在ImageViews中显示可绘制对象的目标。

com.bumptech.glide.request.target.CustomTarget
 

一个基本的目标加载资源(位图,绘制等),使用外视图。
如果你正在加载一个资源到一个视图,使用RequestBuilder.into(ImageView),一个子类的ImageViewTarget,或CustomViewTarget。使用这个类将资源加载到视图中可以防止Glide正确地取消以前的加载,这可能会导致错误的图像出现在视图中,特别是在RecyclerView这样的滚动视图中。

你必须实现target . onloadcleared (Drawable),并确保所有对任何资源的引用传递到target中的目标。在Target.onLoadCleared(Drawable)完成之前删除onResourceReady(Object, Transition)。如果做不到这一点,可能会导致图像损坏,bitmap回收导致的崩溃,以及其他未定义的行为。让Target.onLoadCleared(Drawable)未实现或为空永远都不安全。即使你不手动清除这个目标,Glide可能会在Fragments和activity中的某些生命周期事件后自动清除。

这个类只能与Target一起使用。SIZE_ORIGINAL或当创建目标时所需的资源维度已知时。如果你想运行一些异步进程并充分利用getSize(SizeReadyCallback)和SizeReadyCallback,直接扩展Target而不是使用这个类。

com.bumptech.glide.load.model.ModelLoader
 

一种工厂接口,用于将任意复杂的数据模型转换为具体的数据类型,DataFetcher可以使用该数据类型为模型所表示的资源获取数据。
这个接口有两个目标:1。将特定模型转换为可以解码为资源的数据类型。

  1. 允许模型与视图的维度组合,以获取特定大小的资源。

这不仅避免了重复的维度在xml和代码中为了确定大小的设备上有不同的密度,而且还允许您使用布局权重或通过编程将视图的尺寸没有强迫你去拿一个通用的资源大小。

获取的资源越小,占用的带宽和电池寿命就越短,每个资源占用的内存就越少。

com.bumptech.glide.load.ResourceDecoder
 

解码资源的接口。

com.bumptech.glide.load.Transformation
 

一个用于在实现Key.equals(Object)和Key.hashCode()}的资源上执行任意转换的类,以识别内存缓存中的转换,以及Key.updateDiskCacheKey(java.security.MessageDigest)}来识别磁盘缓存中的转换。
使用完全限定的类名作为静态最终字符串(而不是class . getname()以避免proguard混淆)是正确实现Key.updateDiskCacheKey(java.security.MessageDigest)}的一种简单方法。如果需要额外的参数,可以将它们传递给Transformation的构造函数,然后使用它们更新传递给Key.updateDiskCacheKey(MessageDigest)的MessageDigest。如果参数是基本类型,通常可以使用ByteBuffer轻松地序列化它们。String类型可以使用String. getbytes (Charset)使用常量Key.CHARSET序列化。

实现必须实现Key.equals(Object)和Key.hashCode()以使内存缓存正常工作。

com.bumptech.glide.load.engine.DiskCacheStrategy
 

一组可用的媒体缓存策略。(目测用到了策略模式【Strategy Pattern】)

com.bumptech.glide.load.model.ModelLoaderFactory
 

用于为给定模型类型创建ModelLoader的接口。
必要时,可以将应用程序上下文传递给工厂的构造函数。在工厂中保留活动上下文是不安全的。在大多数情况下Context可以从LibraryGlideModule.registerComponents(Context, Glide, Registry)获取。。

com.bumptech.glide.signature.AndroidResourceSignature

包括有关包的信息以及设备是否处于夜间模式

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/684191.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号