重点说说这个好处
最近阅读Android RecyclerView源码时,遇到一个方法参数:payload,不能理解。用字典查了下,中文意思是:有效负荷。查完之后,还是不能准确地掌握这个词,当然也就不能很好地理解源码的意图了。
(画外之音:好像不能马上用Google和Wikipedia搜下这个词一样)
说来也巧,最近又在补网络方面的知识,经常性地在书籍中遇到Payload这个单词。随便举几个例子:
IP Datagram和UDP Datagram都分为两部分,其中一部分是Header,另一个部分是data,也可以叫payload,我想,当把Payload放在这里,就很容易理解了,它就是承载有效数据的地方。然后把理解到的点带入到RecyclerView的源码中,感觉就明朗了不少。
通过这种感觉我想到:将技术原版书籍和文章作为学习资料,在一定程度上会有助于开源软件源码的阅读。假如我阅读的是中文书籍,可能不会知道Payload这个单词,更谈不上知道它的用法了。而很多优秀的源码里面变量、方法 类、文件的命名,大部分都是一些技术术语,它们都有着特定的涵义和使用场景的。
不禁感叹到:在大学中,如果学生从一开始就通过英文教材来学习计算机,对后期的学习和工作都是有非常大的好处。
(画外之音:我暴露了自己喜欢感叹的习惯)
最后,再随便提一下,我平时学习技术的一个方式: 尽量去看原版书籍,如果实在看不懂,可以通过一本中文书籍入门。等到一定的时间,再深入学习英文原版教材,并同时寻找对应的开源源码实现,对照学习。
又到了举栗子的时间了: 学习HTTP、HTTPs,我就找了OKHttp来学习; 学习数据结构中的双端队列时,我找到Java Collection Framework中的Deque相关实现类; 学习虚拟机中的运行时内存区域时,就直接找到了Dalvik、ART相关源码来看等等。
稍微扩展一下吧
说说RecyclerView中带有payload参数的那个方法吧。方法如下: 
这个方法是RecyclerView内部类Adapter中的方法,提供局部刷新的功能。如果playload为空,则会刷新整个Item,显然这种方式刷新性能不高,特别是Item中存在图片的情况,可能引起刷新闪烁的效果。 为此,我们继续可以使用「局部刷新」策略,不刷新整个Item,只刷新Item中需要刷新的部分。假设RecyclerView ItemView的布局(伪代码)如下:
<LinearLayout orientation=“vertical”>
<ImageView id=“avatar”/>
<TextView id=“age”/>
<TextView id=“name”/>
</LinearLayout>
假设ImageView在程序运行期间不会变更,只有age和name两个TextView内容才会变更,那我们完全只需要刷新age和name即可。
以上逻辑需要写在RecyclerView$Adapter中的如下方法中: 
备注: 以上RecyclerView的版本是com.android.support:recyclerview-v7:25.2.0
--EOF--