RecyclerView Adapter 性能方法

RecyclerView Adapter performance approach

我有一个从 Internet 下载数据的 AsyncTask,创建少于 30 个 MyObject 对象,并将其添加到列表中。最后,我将创建一个 MyAdapter 将列表作为参数传递,并将 MyAdapter 设置为回收器视图适配器:

 myList.add(new MyObject("aa", "bb", cc"); //for each piece of data by Internet
 MyAdapter myAdapter = new MyAdapter(myList);
 recyclerView.setAdapter(myAdapter);

现在我正在考虑一种更好的编程方式:我在 AsyncTask 启动之前创建一个新的 MyAdapter,将其分配给 RecyclerView 并为每个新的 MyObject 我调用 MyAdapter 方法将对象添加到列表中并调用 notifyItemInserted:

 myAdapter = new MyAdapter();
 recyclerView.setAdapter(myAdapter);
 myAdapter.addMyObject(new MyObject("aa", "bb", cc"); //for each piece of data by Internet

public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
     private List<News> data = new ArrayAdapter<>();

     public void addMyObject(MyObject myObject) {
        data.add(myObject);
        notifyItemInserted(this.data.size() -1);
     }
}

我想了解第二种方法在以下方面是否优于第一种方法:

  1. 响应式 UI;
  2. 性能;

我不是专家,但我认为第二种方法会强制您的 RecyclerView 重绘自身 ~ 30 次(每个 MyObject 重绘一次),而第一种方法只执行一个绘图过程。由于你的元素很少,我认为第一种方法是可以的。不过还是等这方面比我专业的人回答吧

第二种方法更好。 Recycler 视图将批处理所有添加调用,直到下一个动画帧,并且只会绑定新项目(如果它们可见)。如果能调用notifyItemRangeInserted就更好了。当然我假设这个AsyncTask运行了多次,否则无所谓。