Android glide加载gif特别慢_面试

看到这里我们大概明白了,这个方法是用来递增帧位置的,从它的算法来看,这还是一个无限轮播的算法

Android glide加载gif特别慢_学习_02

看完了 advance 的作用,我们回去接着看剩下的两句代码

Android glide加载gif特别慢_面试_03

是不是忽然有点蒙,这个类是什么,我们先看一下它的父类

Android glide加载gif特别慢_学习_04

是不是有点似曾相识,但就是怎么也说不出来什么,让我们先看看它的父类

Android glide加载gif特别慢_面试_05

这个 Target 就是我们上篇讲到图片加载流程提到过的接口

这个接口的作用就是回调一些加载监听,这个接口前面三个方法分别是:加载开始、加载失败、加载成功读取资源的回调

Android glide加载gif特别慢_java_06

现在我们知道了这个是加载资源的回调,那么它又是从哪里调用的?

Android glide加载gif特别慢_学习_07

就是在我们后面要讲的第三句代码里面调用的,真是让人意想不到

Android glide加载gif特别慢_java_08

我们看到在加载资源的回调中发送了一个消息,那么这个消息最终是去了哪里,接下来让我们根据这个消息的 what 参数进行跟踪

Android glide加载gif特别慢_面试_09

看到 handleMessage 忽然有了一种熟悉的味道,我们看到这里主要处理了两种消息,一种是延迟消息,一种是清理消息。接下来让我们先看看,如果这是一个延迟消息会发生什么事

Android glide加载gif特别慢_java_10

Android glide加载gif特别慢_学习_11

Android glide加载gif特别慢_数据_12

Android glide加载gif特别慢_数据_13

在这里我们看到,它会先获取当前帧数据,然后再通过 Canvas.drawBitmap 到 ImageView 上面,接下来我们回去刚刚那个方法里面,看看它还做了些什么

Android glide加载gif特别慢_数据_14

Android glide加载gif特别慢_加载_15

原来如此,它在刷新新的一帧数据到 ImageView 之后,会对旧的一帧数据进行清除

然后再回去继续看,它还做了什么事

Android glide加载gif特别慢_java_16

Android glide加载gif特别慢_面试_17