Android 为什么在 RecyclerView 中使用 executePendingBindings

Android Why use executePendingBindings in RecyclerView

我最近一直在使用数据绑定,并且遇到了 executePendingBindings 方法。该文档几乎没有显示它,我不明白它是如何工作的或何时使用它。

许多开发人员在 onBindViewHolder 回调中使用 executePendingBindings,但我自己在回收器中没有看到使用与否的任何差异。

有人可以解释为什么在回收站中使用它很重要吗??谢谢

    @Override
    public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {

            Customer customer= List.get(position).second;
            ((CustomerViewHolder)holder).binding.setCustomer (customer)

            ((CustomerViewHolder)holder).binding.executePendingBindings();


}

对您的绑定进行一些更改并不意味着它会对您的 View 产生立即 影响。更改绑定中的内容意味着您实际上是在安排这些更改在最近的将来应用。这有很多原因,性能是其中之一。

假设您的 xml 中有一些复杂的表达式。在设置所有绑定变量之前,您不想弄清楚与绑定变量相关的所有内容。那会浪费资源。

您可以在生成的绑定 java class 中看到更多相关信息。我建议你通读一下。

调用 executePendingBindings 意味着您实际上是在强制框架在调用它的那一刻就在绑定上执行到目前为止它需要执行的所有操作。

如果您的情况不需要,您不必在您的适配器中执行此操作。有些人这样做是为了确保在继续之前正确设置项目的所有内容。所以例如没有像 onBind 在上一轮绑定执行之前被再次调用的情况......或类似的东西......


编辑 1:

另外...不要忘记执行更改的调度(最近的将来)是允许您从不同于 [=15= 的线程 bindingsetVariables ] 线。因为设置变量不会触及 View 本身。


编辑 2:

查看生成的 java classes 的最简单方法是:

  1. 导航 -> 文件

  1. 以 UpperCamelCase 键入绑定文件的名称,后跟 Binding(例如,如果您的布局是 activity_main,请键入 ActivityMainBinding

还有一点我要提一下。当您调用 executePendingBindings() 时,您的列表将不会像没有此调用时那样流畅。因为 executePendingBindings() 在 UI 线程中执行操作。想象一下包含 500 个元素的列表。然后,每次在 UI 中调用此方法时,您都会收到“应用程序可能在其主线程上执行了太多工作”。