之前一篇文章介绍了 ListView 和 RecyclerView 的对比, 这里继续记录下RecyclerView中常用的性能优化方案。
优化方案1:关于点击事件
RecyclerView尽量在onCreateViewHolder()设置点击事件,而不在onBindViewHolder()中设置点击事件。让 View - ViewHolder - ClickListener 是 1-1-1 的对应关系。
优化方案2:RecyclerView嵌套布局
在嵌套布局中(竖则滚动 + 局部横向滚动),可以在内部嵌套的RecyclerView中设置LinearLayoutManager.setInitialPrefetchItemCount(int count)
setInitialPrefetchItemCount() 只在线性布局中才有这个函数,且在内部嵌套RecyclerView设置才有效。 不过 这个方法可以提升 内部嵌套RecyclerView的预加载性能。
优化方案2:RecyclerView局部刷新
notifyDataSetChanged() : 一个常用的数据刷新方法,所有数据全部刷新,性能较低,在可以局部刷新的情况下不建议使用该函数。
notifyItemChanged(int position): 刷新指定postion位置上的数据(需要准确知道变化数据的postion)
DiffUtil: 查找新/旧 数据的差异,然后执行差异中的变化。(推荐使用)
void onNewDataArrived(List<News> news) {
List<News> oldNews = myAdapter.getItems();
// diff判断逻辑,建议放在异步线程中,diff结束后,结果在主线程中刷新
DiffResult result = DiffUtil.calculateDiff(new MyCallback(oldNews, news));
myAdapter.setNews(news);
result.dispatchUpdatesTo(myAdapter);
}
END!












网友评论