首页 > 解决方案 > Android 是批处理 UI 操作还是重新绘制每个命令?

问题描述

当将数据重新绑定到RecycleView. 在有选择地将 UI 更改应用到视图之前,我通常会将它们全部重置为默认状态。

   override fun onBindViewHolder(holder: ViewHolder, position: Int) {

          /* Reseting to normal/default state */
          holder.title.visibility = View.VISIBLE
          holder.poster.visibility = View.VISIBLE

          /* Applying data */
          if (data.poster.url == null) {
              holder.poster.visibility = View.GONE
          }

   }

在这里,poster视图可能会在很短的时间间隔内发生一次又一次的变化visibilityVISIBLEGONE

  1. Android 是否实际上使两种可见性更改都无效并请求绘图?例如,如果在绑定之前holder.posterview 是GONE,那么 Android 会将其绘制为可见然后又消失了?

  2. 还是将它们批处理并仅执行最新状态?例如,如果我们希望应用程序以 60fps 的速度运行,它可能会以 16ms 的间隔批处理 UI 操作。我可以更改Visibility数百次,但它实际上会在 16 毫秒的批次中绘制最后一个状态。

标签: android

解决方案


第 2 点是正确的,但在您的用例中有一个更简单的原因。

onBindViewHolder方法在主线程上运行。因此,在该线程返回之前,无法对该线程进行其他操作。

对视图属性的每次更改都可能使视图无效。布局和绘图发生一次,然后onBindViewHolder返回。


推荐阅读