android glide 版本,Android Studio 第六十七期 - Android Glide3.7.0和3.8.0用法

一、前言:再优秀的开源库都有坑要填

手上的项目使用的图片加载框架是:Universal-Image-Loader+业务需要定制化的一些代码。Universal-Image-Loader 这个框架是一个非常经典好用的框架,唯一的问题是是作者很久之前就不再更新了。所以综合考虑下,确定使用Glide+封装代替当前的图片加载框架。二、困惑:

在没有真正使用 Glide 之前,我所看到的文章基本都是赞美这个库的功能强大,加载流畅。然而,当我用上了以后,才发现并不完美。遇到了不少的坑,需要自己填。

2.1 Glide 配合 OKHttp 使用的坑:

需要在Gradle中引入:

compile "com.github.bumptech.glide:glide:3.7.0"

compile "com.github.bumptech.glide:okhttp3-integration:1.4.0@aar"

这里就有一个坑,如果你用到自定义的 GlideModule,这里的可能会失效,被com.github.bumptech.glide:okhttp3-integration:1.4.0@aar默认的替换

解决方法是升级版本号:

compile "com.github.bumptech.glide:okhttp3-integration:1.4.0@aar" -》 compile "com.github.bumptech.glide:okhttp3-integration:1.5.0"

注意,没有@arr 还有1.5.0默认选择是3.8.0的glide 所以改一下3.7.0的引入compile "com.github.bumptech.glide:glide:3.7.0"-》compile "com.github.bumptech.glide:glide:3.8.0"

2.2 OKHttpClient 超时设置导致图片无法加载坑:

因为Glide本身只负责图片加载,网络请求图片数据由网络框架决定。网络请求一般会有超时的问题,坑的是OKHttp默认的超时时间太短了,如果不修改,网络状态比较差

就很容易请求超时,图片自然就加载不出来。我设置的参数是60,60,30这个可以自己根据实际情况确定。//这个是源码里面的,默认超时时间,都是10s,10000msconnectTimeout = 10_000;

readTimeout = 10_000;

writeTimeout = 10_000;//手动设置超时时间

OkHttpClient client=new OkHttpClient.Builder()

.connectTimeout(HTTP_CONNECT_TIMEOUT, TimeUnit.SECONDS)

.readTimeout(HTTP_READ_TIMEOUT, TimeUnit.SECONDS)

.writeTimeout(HTTP_WRITE_TIMEOUT, TimeUnit.SECONDS)

.build;

2.3 Glide 查看 log 的坑:

如果你使用 Glide 经常出现图片加载不出来或者加载有问题,你需要查看 Glide 本身的 log,不过这个必须通过 adb 命令开启,详情百度,需要注意如果是请求图片问题,关注请求的 log,图片加载||转换的问题,关注图片加载||转换的log。

2.4 Glide 加载的图片内存占用巨多的坑:

在使用 Glide 的第一个版本,OOM 问题一下子爆炸了,查看内存占用,使用 Universal-Image-Loader 的旧版本,App 占用50m~80m内存,

而使用 Glide 加载列表大图的时候,突然猛增到120M+,低端机器自然很容易就 OOM 了。

Glide 有一个优点被很多人称赞,就是它会根据图片控件的大小对 Bitmap 进程缩放处理,适应控件的大小。

但是,如果是一个控件,在高分屏下,它的控件大小往往比实际图片尺寸大很多,举例一个控件:

长宽:1080400,图片原始尺寸540200,如果不做任何设置,Glide 会把 bitmap 放大到控件大小,那么占用的内存就变成了原始大小四倍。。。

这个是 Glide 的特性,暂时没有找到的方法修改。

临时方案:为了避免Glide自动把bitmap放大,使用在加载图片的时候,使用 .override(width, height) 限制图片的宽高

2.5 Glide 使用过渡动画造成图片变形的 bug

Glide 默认会加载图片的时候会有一个过渡效果,其原理是采用TransitionDrawable实现的。

但是这个和 placeHolder,一起使用,尤其是你的playHolder的尺寸比你加载的图片要大,这个时候就会出现,你加载出来的图片变形的问题。

很多人推荐使用 .dontAnimate() 解决问题,即去掉过渡动画。

但是,如果产品一定需要加入过渡动画,官方其实没有提供完美的解决方案,Glide的作者之一在stackoverflow有回答并且给出了 github 的代码。

http://stackoverflow.com/questions/32235413/glide-load-drawable-but-dont-scale-placeholder

https://github.com/TWiStErRob/glide-support/tree/master/src/glide4/java/com/bumptech/glide/supportapp

注意:我在使用的过程中发现,如果你的ImageView的type是center_crop 的话,那么必须确保你的place_holder默认图片,长宽小于你加载的图片,不然即使使用的了作者的代码,任然会有变形的问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/426903.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实例21:python

#猴子吃桃问题:猴子第一天摘下若干个桃子, #当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半, #又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。 #到第10天早上想再吃时,见只…

thincmf 分页无法搜索_thinkcmf5 后台搜索分页保持分页条件

本文最后更新于2019-05-16,已超过 1年没有更新,如果文章内容、图片或者下载资源失效,请留言反馈,我会及时处理,谢谢!温馨提示:本文共568个字,读完预计2分钟。$where array();$keywo…

Python List insert()方法

Python 列表 描述 insert() 函数用于将指定对象插入列表的指定位置。 语法 insert()方法语法: list.insert(index, obj) 参数 • index – 对象 obj 需要插入的索引位置。 • obj – 要插入列表中的对象。 返回值 该方法没有返回值,但会在列表指定位置插…

android5.1 显示方向,Android5.1 Settings.apk定制显示选项

在Android5.0后,系统应用的目录结构发生了一些变化,以往/system/app/下直接是APK文件,目前是/system/app/应用名目录/应用apk类似这种目录结构。同时在Android5.1上反编译Settings.apk需要使用最新apktool_2.0.3来反编译,否则无法…

db2locate函数_DB2常用函数详解

VALUE函数语法:VALUE(EXPRESSION1,EXPRESSION2)VALUE函数是用返回一个非空的值,当其第一个参数非空,直接返回该参数的值,如果第一个参数为空,则返回第一个参数的值。eg:--表示如果T1.ID为空,则返回空串&…

实例22:python

#题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人, #乙队为x,y,z三人。已抽签决定比赛名单。 #有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。 #!/usr/bin/python -- c…

CF468B Two Sets

原题链接 DOWNLOAD AS PDF 题目大意 给出\(n\)个各不相同的数字,将它们分别放入\(A\)和\(B\)两个集合中,使它们满足: 若数字\(x\)在集合\(A\)中,那么数字\(a-x\)也在集合\(A\)中;若数字\(x\)在集合\(B\)中,…

windows c语言 redis,windows上使用VS2012 C++语言调用Redis的解决方案

最近我在VS2012上进行Redis开发遇到一些困扰. 编译Redis的lib库没问题。但是使用这些lib库就不太顺利了. 在网上查来查去也没解决。不过其实Redis的客户端项目RedisCli.vcxproj,就是一个最好的使用例子. 我把几个需要注意的地方贴出来注意事项1. 链接器->输入->忽略所有默…

plantuml 方法图_PlantUML 语法之时序图

plantUML 下载(含《plantUML语法指南手册》):http://plantuml.com/downloadVisual Studio Code 安装 plantUML 插件,在插件应用商店中搜索:PlantUML,点击安装即可。快捷键:Alt D 即可快速预览,Ctrl Shift…

运维实施面试题

记得不是很清楚了,大概回忆一下 1集线器,路由器。交换机的区别 术语解释   路由器:(Router)是连接因特网中各局域网、广域网的设备。在路由器中记录着路由表,它会根据信道的情况自动选择和设定路由&#…

CCF 201312-3 最大的矩形[比较简单]

问题描述 试题编号:201312-3试题名称:最大的矩形时间限制:1.0s内存限制:256.0MB问题描述: 问题描述在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i(1 ≤ i ≤ n)个矩…

鸿蒙系统太烂,一加终于觉醒!变相承认系统太烂,魅族的吐槽一针见血

刘作虎宣布,一加9系列出厂预装ColorOS 11,终于证实了外界的猜想,一加终于也要放弃自己的系统,这已经证明了之前的氢系统已经在国内市场上彻底失败。想要收服用户,还是需要本土定制化的应用。不过这也显示出一加手机的决…

安卓开发toolbar设置logo_Android之ToolBar的使用

Toolbar是在 Android 5.0 开始推出的一个 Material Design 风格的导航控件 ,Google 非常推荐大家使用 Toolbar 来作为Android客户端的导航栏,以此来取代之前的 Actionbar 。与 Actionbar 相比, Toolbar 明显要灵活的多。它不像 Actionbar 一样…

实例23:python

#题目:打印出如下图案(菱形): * *** ***** #******* ***** *** * #先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重for循环,第一层控制行,第二层控制列。…

babel 用法及其 .babelrc 的配置详解,想做前端架构,拒绝一知半解...

Babel 官方介绍:将 ECMAScript 2015 及其版本以后的 javascript 代码转为旧版本浏览器或者是环境中向后兼容版本的 javascript 代码。 简而言之,就是把不兼容的 JavaScript 代码转为可兼容,可以执行的 JavaScript 代码。 功能: 语…

android 滚动尺画到控件中间,android 刻度尺控件实现

主要实现刻度尺的效果,能够快速滑动刻度,设置刻度间距,刻度值,滑动回调。简单易用效果图textureView控件的选择总结来说:1.view的绘制在主线程里面,频繁绘制会导致主线程阻塞2.我们知道一个surfaceview是异步绘制的&am…

实例24:python

#题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。 #!/usr/bin/python -- coding: UTF-8 -- a 2.0 b 1.0 s 0 for n in range(1,21): s a / b t a a a b b…

适合新手入门的8个python项目_推荐:一个适合于Python新手的入门练手项目

随着人工智能的兴起,国内掀起了一股Python学习热潮,入门级编程语言,大多选择Python,有经验的程序员,也开始学习Python,正所谓是人生苦短,我用Python有个Python入门练手项目,一直没有…

Luogu 4514 上帝造题的七分钟

二维差分树状数组。 定义差分数组$d_{i, j} a_{i, j} a_{i - 1, j - 1} - a_{i, j - 1} - a_{i - 1, j}$,有$a_{i, j} \sum_{x 1}^{i}\sum_{y 1}^{j}d_{i, j}$。 我们要求$sum(n, m) \sum_{i 1}^{n}\sum_{j 1}^{m}a_{i, j} $, 代入$a_{i, j}$&am…

jsp空白页面传html代码,echarts在HTML里测试一般,在jsp页面不显示,而且还把整个页面变成空白...

echarts在HTML里测试正常,在jsp页面不显示,而且还把整个页面变成空白echarts在HTML里测试正常,在jsp页面不显示,而且还把整个页面变成空白,请大神帮忙,急,在线等Created by IntelliJ IDEA.User:…