Android glide框架及框架涉及到的设计模式

目录

      • 原文链接
      • [Android glide框架 简单使用介绍](#Android glide框架 简单使用介绍)
        • [Glide 框架整体结构设计](#Glide 框架整体结构设计)
        • [Glide 框架的优点](#Glide 框架的优点)
        • 基本使用:
        • Glide占位符
      • [Android glide框架涉及到的设计模式](#Android glide框架涉及到的设计模式)

原文链接

Android glide框架 简单使用介绍

Glide:快速高效的Android图片加载库,可以自动加载网络、本地文件、app资源中的图片,注重于平滑的滚动

Glide基本使用

开源地址:https://github.com/bumptech/glide

中文文档:https://muyangmin.github.io/glide-docs-cn/

模块的build.gradle中引入Glide:

java 复制代码
implementation 'com.github.bumptech.glide:glide:4.12.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'

Glide 框架整体结构设计

原文链接

  1. Glide 框架主要分为两大流程:

    1.1 图片请求的构建流程。

    1.2 图片缓存的获取流程。

  2. 图片请求构建流程内又分为四个模块:

    2.1 用户态的请求模块: 用户使用 Glide 进行链式调用的时候会生成一个用户态的 Request。

    2.2 真实的请求模块: 由于步骤2.1中会根据场景构建多种Request,因此在发起图片请求时需要进行收口,因此会使用用户态的 Request 构建一个真正的 GenericRequest 请求。

    2.3 Request 生命周期管理模块: Glide 的一大特点是会将图片的请求和页面生命周期进行绑定,避免出现内存泄漏的风险,因此会有一个 Request 生命周期管理模块。

    2.4 Registry中心模块: 由于 Glide 支持加载多种类型的数据,因此在注册中心会预先注册所支持类型处理类的信息。

  3. 图片缓存一共分为3大层,5小层:

    3.1 内存缓存(2小层): 弱引用缓存、LruCache。

    3.2 本地缓存(2小层): 本地 ResultCache 缓存、本地 SourceCache 缓存。

    3.3 Source 数据源(1小层): 网络获取、本地 AssetPath 获取、其它本地图片。

五层缓存进行定义

第一层:内存缓存 -> 弱应用缓存(ActiveResource)。

第二层:内存缓存 -> LruCache

第三层:磁盘缓存 -> ResultCache (经过transform的图)

第四层:磁盘缓存 -> SourceCache (从DataFetcher 直接拉取到的数据)

第五层:数据源 -> Source

Glide 框架的优点

加载类型多样化:Glide 支持 Gif、WebP、Jpeg、Png 等格式的图片。

生命周期的绑定:图片请求与页面生命周期绑定,避免内存泄漏。

使用简单(链式调用),且提供丰富的 Api 功能 (如: 图片裁剪等功能)。

高效的缓存策略:

Glide 框架的优点

  1. 支持多种缓存策略 (Memory 和 Disk 图片缓存)。
  2. 根据 ImageView 的大小来加载相应大小的图片尺寸。
  3. 内存开销小,默认使用 RGB_565 格式 (3.x 版本)。
  4. 复用对象 (享元模式),降低内存的抖动。
  5. 通过 Lru 算法来管理内存缓存和磁盘缓存,保证资源使用的可控性。

基本使用:

java 复制代码
Glide.with(this)
.load(strUrl)
.into(mShow_img);
  1. Glide.with中参数是哪个环境变量对象,说明它会和哪个环境变量的生命周期绑定到一起。
    Glide的使用大量减少了因为图片导致的OOM的可能。
  2. url 可以是一个R.** 的图片资源id,也可以是https.*, 也可以是文件对象
    如果是https,则需在AndroidManifest.xml中申请网络权限;如果是文件对象,则需在AndroidManifest.xml中申请存储卡读写权限。
  3. into方法将图片传递给指定的ImageView

Glide占位符

Glide4中占位图的使用方法,包括(placeholder、error、fallback)三种占位图:

  • placeholder:正在请求图片的时候展示的图片
  • error:如果请求失败的时候展示的图片(如果没有设置,还是展示placeholder的占位符)
  • fallback:如果请求的url/model为 null 的时候展示的图片(如果没有设置,还是展示placeholder的占位符)
java 复制代码
RequestOptions requestOptions = new RequestOptions()
    .placeholder(R.drawable.hold)
    .error(R.drawable.error)
    .fallback(R.drawable.fallback)
    .override(100, 100);  //override指定加载图片大小,可不设置

Glide.with([fragment/Context/View])
    .load(url)
    .apply(requestOptions)
    .into(imageView);

Android glide框架涉及到的设计模式

  1. Builder 模式:Glide 使用 Builder 模式来构建图片加载请求。通过链式调用一系列方法设置加载参数和配置,最后调用 into() 方法执行加载操作。
java 复制代码
Glide.with(context)
     .load(imageUrl)
     .placeholder(R.drawable.placeholder)
     .centerCrop()
     .into(imageView);
  1. Singleton(单例)模式:Glide 的核心组件 Glide、RequestManager 和 RequestBuilder 都采用了单例模式,确保在整个应用程序中只有一个实例。
java 复制代码
Glide glide = Glide.get(context);
RequestManager requestManager = Glide.with(fragment);
  1. Proxy(代理)模式:Glide 使用了代理模式来实现图片加载的过程。通过使用 RequestManager 作为中介,封装了 Glide 的加载逻辑,并提供了一系列的方法来管理加载请求。
java 复制代码
RequestManager requestManager = Glide.with(context);
requestManager.load(imageUrl)
             .placeholder(R.drawable.placeholder)
             .into(imageView);
  1. Strategy(策略)模式:Glide 中的 Transformation 和 Decoder 使用了策略模式。Transformation 定义了一系列的图片转换策略,如圆角、缩放等;Decoder 定义了一系列的图片解码策略,如 Bitmap、Gif 等。
java 复制代码
RequestOptions requestOptions = new RequestOptions()
       .transform(new RoundedCorners(16))
       .override(300, 300);

Glide.with(context)
     .load(imageUrl)
     .apply(requestOptions)
     .into(imageView);
  1. Observer(观察者)模式:Glide 中的生命周期管理使用了观察者模式。通过监听 Fragment 或 Activity 的生命周期回调,及时清理和取消图片加载请求,避免内存泄漏和无效的请求。
java 复制代码
@Override
public void onStart() {
    super.onStart();
    Glide.with(this).onStart();
}

@Override
public void onStop() {
    super.onStop();
    Glide.with(this).onStop();
}
相关推荐
踏雪羽翼19 小时前
android 解决混淆导致AGPBI: {“kind“:“error“,“text“:“Type a.a is defined multiple times
android·java·开发语言·混淆·混淆打包出现a.a
csj5019 小时前
安卓基础之《(21)—高级控件(3)翻页类视图》
android
2501_9159184120 小时前
中小团队发布,跨平台 iOS 上架,证书、描述文件创建管理,测试分发一体化方案
android·ios·小程序·https·uni-app·iphone·webview
betazhou20 小时前
MySQL相关性能查询语句
android·数据库·mysql
一起养小猫20 小时前
Flutter for OpenHarmony 进阶:Timer组件与倒计时系统深度解析
android·网络·笔记·flutter·json·harmonyos
符哥200820 小时前
Fastjson2.X 使用详解
android·java
月明泉清20 小时前
Android中对于点击事件的深度梳理(三)
android
电饭叔21 小时前
DataFrame和 Series 索引
android·python
lexiangqicheng21 小时前
【全网最全】React Native 安卓原生工程结构与构建机制深度解析
android·react native·react.js
数据蜂巢21 小时前
MySQL 8.0 生产环境备份脚本 (Percona XtraBackup 8.0+)
android·mysql·adb