图解 Glide 网上讲解 Glide 的文章一搜一大把,但几乎都是以文字的形式来讲解;我自己也写过不少 Glide 的笔记,也是文字为主;但是时间长了经常忘了其中的细节,加上 Glide 的源码不太易懂,所以决定用时序图来分析和记录研究 Glide 的过程 时序图下面两张图是一次图片加载的大体流程,有读过源码的同学基本上通过这两种图就能回忆起其中的细节;没读过源码的同学也可以先了解下 Glide 里各个类的作用 2020-10-31 #glide #fresco #imageloader #图片加载
阅读源码系列:ANR 是怎么产生的 根据日常的经验我们大概知道,如果 app 没有及时消费 MotionEvent,超过 5s 就会弹出 ANR 对话框;那么 ANR 的逻辑肯定是在事件分发过程中产生的,我们从事件的源头找起,看看 input 事件是怎么产生的 input 的分发 事件分发是从线程 InputReaderThread 开始的,它的主要工作是: 从目录 /dev/input 获取 input event 看来 and 2020-10-20 #ANR
一文搞懂事件分发,手势冲突和滑动冲突 手势冲突是 android 开发中经常遇到的一类问题了,网上讲解此问题的文章也很多,但是大都浅显地过一遍事件分发的调用栈,然后给出一个调用栈流程图;要不就是使用日志大法,用日志来验证自己的想法,完全没有参考价值;这里根据事件分发相关源码,记录下我的理解。 MotionEvent 里定义的 ACTION_XXX 还不少有 10 多个,看起来情况很复杂的样子,实际上只需要关注三个:ACTION_DOW 2020-10-04 #TouchEvent #Motion #NestedScrolling
面试官家常之Handler、MessageQueue 和 Looper MessageQueue 是个单向链表,按 Message.when 自然序排 它有类似于「生产者 - 消费者」模型的阻塞队列:没有 Message 时,阻塞直到新 Message 入队;否则阻塞到下一个 Message.when // 这里会阻塞 nativePollOnce(ptr, nextPollTimeoutMillis); synchronized (this) { 2020-09-27 #Looper #Handler
git log命令全解析,打log还能这么随心所欲! git log 命令非常强大而好用,在复杂系统的版本管理中扮演着重要的角色,但默认的 git log 命令显示出的东西实在太丑,不好好打扮一下根本没法见人,打扮好了用 alias 命令拍个照片,就正式出道了! 下面先详细而系统地介绍 git log 的所有配置知识(用我一向简洁清晰的表述方式),熟悉了这些东西,你就可以自由配置自己美丽的 git log 了~最后上个干货,直接给一个我打扮好的 al 2020-09-15 #git
git 的 merge, rebase 和 squash 在团队合作中,毫无疑问,我们需要一个版本管理工具,相对于 SVN 这种在我们看来是老古董的工具,Git 在年轻化的团队中更受欢迎。并不仅仅是跟着大神们(Linux系)的路子在走,所以感觉很牛逼,而是 Git 真的很牛逼,当然,牛逼的同时你需要的学习曲线也是很陡的。这几天我就遇到了一个问题,其实也不是遇到问题,而是遇到了疑惑,那就是我在 github 系统中 merge 同时的 PR 的时候发现有好 2020-09-05 #git