概述:

Glide官网

Glide是一个快速高效的Android图片加载库,注重于平滑的滚动。Glide提供了易用的API,高性能、可扩展的图片解码管道(decode pipeline),以及自动的资源池技术。

Glide 支持拉取,解码和展示视频快照,图片,和GIF动画。Glide的Api是如此的灵活,开发者甚至可以插入和替换成自己喜爱的任何网络栈。默认情况下,Glide使用的是一个定制化的基于HttpUrlConnection的栈,但同时也提供了与Google Volley和Square OkHttp快速集成的工具库。

虽然Glide 的主要目标是让任何形式的图片列表的滚动尽可能地变得更快、更平滑,但实际上,Glide几乎能满足你对远程图片的拉取/缩放/显示的一切需求。

性能

Glide 充分考虑了Android图片加载性能的两个关键方面:

  • 图片解码速度
  • 解码图片带来的资源压力

为了让用户拥有良好的App使用体验,图片不仅要快速加载,而且还不能因为过多的主线程I/O或频繁的垃圾回收导致页面的闪烁和抖动现象。
Glide使用了多个步骤来确保在Android上加载图片尽可能的快速和平滑:

  • 自动、智能地下采样(downsampling)和缓存(caching),以最小化存储开销和解码次数;
  • 积极的资源重用,例如字节数组和Bitmap,以最小化昂贵的垃圾回收和堆碎片影响;
  • 深度的生命周期集成,以确保仅优先处理活跃的Fragment和Activity的请求,并有利于应用在必要时释放资源以避免在后台时被杀掉。
要求:

Glide v4最低支持Android Ice Cream Sandwich (API level 14).

二、 使用:

1 . 前期准备:
在build.gradle 中添加:

implementation ‘com.github.bumptech.glide:glide:4.8.0’

最新版本可到github上获取: https://github.com/bumptech/glide

2. 示例:
2.1 基本用法

Glide 使用简明的流式语法API,这是一个非常棒的设计,因为它允许你在大部分情况下一行代码搞定需求:

Glide.with(fragment).load(myUrl).into(imageView);

取消加载同样很简单:

Glide.with(fragment).clear(imageView);

尽管及时取消不必要的加载是很好的实践,但这并不是必须的操作。实际上,当 Glide.with() 中传入的 Activity 或 Fragment 实例销毁时,Glide 会自动取消加载并回收资源。

2.2在 Application 模块中的使用

在 Application 模块中,可创建一个添加有 @GlideModule 注解,继承自 AppGlideModule 的类。此类可生成出一个流式 API,内联了多种选项,和集成库中自定义的选项:

package com.example.myapp;import com.bumptech.glide.annotation.GlideModule;
import com.bumptech.glide.module.AppGlideModule;
@GlideModule
public final class MyAppGlideModule extends AppGlideModule {}

生成的 API 默认名为 GlideApp ,与 AppGlideModule 的子类包名相同。在 Application 模块中将 Glide.with() 替换为 GlideApp.with(),即可使用该 API 去完成加载工作。

GlideApp.with(fragment).load(myUrl).placeholder(placeholder).fitCenter().into(imageView);
2.3 在 ListView 和 RecyclerView 中的使用

在 ListView 或 RecyclerView 中加载图片的代码和在单独的 View 中加载完全一样。Glide 已经自动处理了 View 的复用和请求的取消:

@Override
public void onBindViewHolder(ViewHolder holder, int position) {String url = urls.get(position);Glide.with(fragment).load(url).into(holder.imageView);
}

对 url 进行 null 检验并不是必须的,如果 url 为 null,Glide 会清空 View 的内容,或者显示 placeholder Drawable 或 fallback Drawable 的内容。

Glide 唯一的要求是,对于任何可复用的 View 或 Target ,如果它们在之前的位置上,用 Glide 进行过加载操作,那么在新的位置上要去执行一个新的加载操作,或调用 clear() API 停止 Glide 的工作。

@Override
public void onBindViewHolder(ViewHolder holder, int position) {if (isImagePosition(position)) {String url = urls.get(position);Glide.with(fragment).load(url).into(holder.imageView);} else {Glide.with(fragment).clear(holder.imageView);holder.imageView.setImageDrawable(specialDrawable);}
}

对 View 调用 clear() 或 into(View),表明在此之前的加载操作会被取消,并且在方法调用完成后,Glide 不会改变 view 的内容。如果你忘记调用 clear(),而又没有开启新的加载操作,那么就会出现这种情况,你已经为一个 view 设置好了一个 Drawable,但该 view 在之前的位置上使用 Glide 进行过加载图片的操作,Glide 加载完毕后可能会将这个 view 改回成原来的内容。

这里的代码以 RecyclerView 的使用为例,但规则同样适用于 ListView。

2.4 非 View 目标

除了将 Bitmap 和 Drawable 加载到 View 之外,你也可以开始异步加载到你的自定义 Target 中:

Glide.with(context.load(url).into(new SimpleTarget<Drawable>() {@Overridepublic void onResourceReady(Drawable resource, Transition<Drawable> transition) {// Do something with the Drawable here.}});

如果加载不出来网络图片,请看Android Studio 处理网络图片加载不出来问题。

Android 进阶:网络图片加载 - Glide篇相关推荐

  1. Universal-Image-Loader,android-Volley,Picasso、Fresco和Glide五大Android开源组件加载网络图片的优缺点比较

    在android中的加载网络图片是一件十分令人头疼的事情,在网上有着许多关于加载网络图片的开源库,可以让我们十分方便的加载网络图片.在这里我主要介绍一下我自己在使用Volley, Picasso, U ...

  2. Android 6种加载网络图片的第三方详解

    一. Glide加载 Glide.with(this).load("http://p0.qhimg.com/t015f3654b694ad2f8a.jpg").into(image ...

  3. Android网络图片加载缓存处理库的使用---第三方库学习笔记(五)

    两款比较优秀的开源图片处理库框架:Universal-ImageLoader和Picasso. Universal-ImageLoader 简介: Universal-ImageLoader是目前An ...

  4. android异步加载图片并缓存到内存和sd卡上,Android批量图片加载经典系列——采用二级缓存、异步加载网络图片...

    http://www.cnblogs.com/jerehedu/p/4560119.html 2015-06-08 09:20 by 杰瑞教育, 232 阅读, 1 评论, 收藏, 编辑一.问题描述 ...

  5. Android apk动态加载机制的研究(二):资源加载和activity生命周期管理

    转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/23387079 (来自singwhatiwanna的csdn博客) 前言 为了 ...

  6. Android 图片异步加载的体会,SoftReference已经不再适用

    在网络上搜索Android图片异步加载的相关文章,目前大部分提到的解决方案,都是采用Map<String, SoftReference<Drawable>>  这样软引用的方式 ...

  7. 如何为Compose Image提供网络图片加载支持

    本文是源码分析类文章 如何为Compose Image提供网络图片加载支持?目前(Compose 1.0.5)最好的选择是使用图片框架Coil,Coil对Jetpack Compose相关的支持文档在 ...

  8. Android 高清加载巨图方案 拒绝压缩图片

    Android 高清加载巨图方案 拒绝压缩图片 转载请标明出处:  http://blog.csdn.net/lmj623565791/article/details/49300989:  本文出自: ...

  9. Android studio 使用心得(六)---android studio 如何加载.so文件

    2019独角兽企业重金招聘Python工程师标准>>> 之前一直没怎么注意,以为.so文件android为像eclipse一样直接加载,但是直到昨天我在android studio上 ...

最新文章

  1. 体外反搏做_体外反搏治疗的原理
  2. php sku添加,php – 在单个产品页面中显示SKU下的自定义字段值
  3. 调用webapi 错误:使用 HTTP 谓词 POST 向虚拟目录发送了一个请求,而默认文档是不支持 GET 或 HEAD 以外的 HTTP 谓词的静态文件。的解决方案
  4. 路由器的×××流量过滤
  5. 变量命名 – 匈利亚命名法则 - C语言零基础入门教程
  6. 计算机网络利弊的作文英语作文,网络的弊端英语作文(精选6篇)
  7. endnote大客户版_Endnote软件的使用,有图有干货!
  8. 企业选型数据库系统的五点建议
  9. 宇宙那么大,跟着链游“上天”看看?
  10. 微信公众号模板消息管理
  11. 利用python下载钉钉群直播视频
  12. Office WORD如何为每一页设置不同的页眉页脚
  13. 增值电信业务经营许可证办理续期流程
  14. Spring Boot Redis 实现分布式锁,真香!!
  15. https SSL协议详解
  16. 二进制枚举+prim buy or build 问题
  17. 告研究生新生-研究生导师书
  18. J2EE学习从菜鸟变大鸟之四 JNDI(Java Naming and Directory Interface)
  19. 计算机开机引导过程的结果是,计算机开机的引导过程是怎么样的,学会了能解决大部分的开机问题...
  20. IPv6任播技术及其任播地址解析协议概述

热门文章

  1. 《当程序员的那些狗日日子》(四十四)是办公室还是牢房
  2. vue比较完整的方法介绍 和获取事件对象
  3. 深度活体模型带交互模型版
  4. 白月黑羽教python之selenium:课后练习
  5. 876. 快速幂求逆元
  6. appium命令版安装
  7. 很抱歉,OneDrive服务器出现问题,请稍后重试。(错误代码:0x8004def5)
  8. java基于springboot+Vue+nodejs的高校网上二手闲置跳蚤市场 element
  9. web前端大作业--黑色电影资讯博客网页设计(电影主题-HTML+CSS+JavaScript)
  10. 刘海洋 · LaTeX 不快速的入门 学习笔记