我们可以看到当 Gif 只有一帧的时候,会直接调用绘制方法,而 Gif 不止一帧的时候,那么它就开启了订阅,接下来让我们看看这个订阅的方法里面做了什么事情
接下来让我们重点看一下这三句代码分别做了什么事
看到这里我们大概明白了,这个方法是用来递增帧位置的,从它的算法来看,这还是一个无限轮播的算法
看完了 advance 的作用,我们回去接着看剩下的两句代码
是不是忽然有点蒙,这个类是什么,我们先看一下它的父类
是不是有点似曾相识,但就是怎么也说不出来什么,让我们先看看它的父类
这个 Target 就是我们上篇讲到图片加载流程提到过的接口
这个接口的作用就是回调一些加载监听,这个接口前面三个方法分别是:加载开始、加载失败、加载成功读取资源的回调
现在我们知道了这个是加载资源的回调,那么它又是从哪里调用的?
就是在我们后面要讲的第三句代码里面调用的,真是让人意想不到
我们看到在加载资源的回调中发送了一个消息,那么这个消息最终是去了哪里,接下来让我们根据这个消息的 what 参数进行跟踪
看到 handleMessage 忽然有了一种熟悉的味道,我们看到这里主要处理了两种消息,一种是延迟消息,一种是清理消息。接下来让我们先看看,如果这是一个延迟消息会发生什么事
在这里我们看到,它会先获取当前帧数据,然后再通过 Canvas.drawBitmap 到 ImageView 上面,接下来我们回去刚刚那个方法里面,看看它还做了些什么
原来如此,它在刷新新的一帧数据到 ImageView 之后,会对旧的一帧数据进行清除
然后再回去继续看,它还做了什么事
还是原来的方法,还是熟悉的三句代码
总结:
各行各样都会淘汰一些能力差的,不仅仅是IT这个行业,所以,不要被程序猿是吃青春饭等等这类话题所吓倒,也不要觉得,找到一份工作,就享受安逸的生活,你在安逸的同时,别人正在奋力的向前跑,这样与别人的差距也就会越来越遥远,加油,希望,我们每一个人,成为更好的自己。
-
BAT大厂面试题、独家面试工具包,
-
资料包括 数据结构、Kotlin、计算机网络、Framework源码、数据结构与算法、小程序、NDK、Flutter
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!
与算法、小程序、NDK、Flutter
[外链图片转存中…(img-nNYHemmt-1715233585997)]
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!