看到这里我们大概明白了,这个方法是用来递增帧位置的,从它的算法来看,这还是一个无限轮播的算法
看完了 advance 的作用,我们回去接着看剩下的两句代码
是不是忽然有点蒙,这个类是什么,我们先看一下它的父类
是不是有点似曾相识,但就是怎么也说不出来什么,让我们先看看它的父类
这个 Target 就是我们上篇讲到图片加载流程提到过的接口
这个接口的作用就是回调一些加载监听,这个接口前面三个方法分别是:加载开始、加载失败、加载成功读取资源的回调
现在我们知道了这个是加载资源的回调,那么它又是从哪里调用的?
就是在我们后面要讲的第三句代码里面调用的,真是让人意想不到
我们看到在加载资源的回调中发送了一个消息,那么这个消息最终是去了哪里,接下来让我们根据这个消息的 what 参数进行跟踪
看到 handleMessage 忽然有了一种熟悉的味道,我们看到这里主要处理了两种消息,一种是延迟消息,一种是清理消息。接下来让我们先看看,如果这是一个延迟消息会发生什么事
在这里我们看到,它会先获取当前帧数据,然后再通过 Canvas.drawBitmap 到 ImageView 上面,接下来我们回去刚刚那个方法里面,看看它还做了些什么
原来如此,它在刷新新的一帧数据到 ImageView 之后,会对旧的一帧数据进行清除
然后再回去继续看,它还做了什么事