为什么需要版本控制系统,我想点进这篇文章的读者应该都已经对这个问题了然于胸,所以不再废话。
我们会从版本是控制系统的历史发展开始着眼,到分布式系统仓库的概念,以及从仓库之间的数据传输协议,到最后的仓库的权限控制系统 Gerrit 一一讲过,来理解这些系统的使用方式和设计理念。
为什么需要版本控制系统,我想点进这篇文章的读者应该都已经对这个问题了然于胸,所以不再废话。
我们会从版本是控制系统的历史发展开始着眼,到分布式系统仓库的概念,以及从仓库之间的数据传输协议,到最后的仓库的权限控制系统 Gerrit 一一讲过,来理解这些系统的使用方式和设计理念。
前段时间在使用 ListView 的过程中,需要对一个子 Item 优化横向 Bannar 的滑动体验,于是借此机会,深入了解了一下 ListView 滑动的一些知识,来探究一下,一个 View 滑动,究竟需要做哪些事情。
MeasureSpec 与 LayoutParams 不得不说的二三事
MesureSpec,测量规格
invalidate 三部曲之历经 Choreographer
Choreographer,编舞者。
invalidate - to make invalid.
由于整个invalidate()
周期较长,继续深入会涉及屏幕刷新等底层知识,所以我们会分为三个部分来讲,分别为View发起绘制、系统处理绘制请求的逻辑、View执行真实绘制。
显示器刷新的频率决定了人肉眼可感受的流畅度,刷新频率太低会导致出现PPT效果,刷新频率太高又没有太高的必要,所以显示器一般的刷新频率为60Hz,人眼可感知的最低限度,即1秒刷新60帧,也就是显示器会1秒从显卡中读取66帧的数据显示到屏幕上,那么这些数据是从哪里来的呢?
每一个事件流,都是以ACTION_DOWN作为开始,以ACTION_UP或ACTION_CANCEL作为结束
在处理开始前,需要做一个安全处理,即是否有不可见的window覆盖其上,防止有恶意软件劫持用户输入事件