android - 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
视图可能会在很短的时间间隔内发生一次又一次的变化visibility
。VISIBLE
GONE
Android 是否实际上使两种可见性更改都无效并请求绘图?例如,如果在绑定之前
holder.poster
view 是GONE
,那么 Android 会将其绘制为可见然后又消失了?还是将它们批处理并仅执行最新状态?例如,如果我们希望应用程序以 60fps 的速度运行,它可能会以 16ms 的间隔批处理 UI 操作。我可以更改
Visibility
数百次,但它实际上会在 16 毫秒的批次中绘制最后一个状态。
解决方案
第 2 点是正确的,但在您的用例中有一个更简单的原因。
该onBindViewHolder
方法在主线程上运行。因此,在该线程返回之前,无法对该线程进行其他操作。
对视图属性的每次更改都可能使视图无效。布局和绘图发生一次,然后onBindViewHolder
返回。
推荐阅读
- c++ - 回文检查器代码卡在无限循环中
- python - Python 3 非阻塞同步行为
- c++ - 程序在运行时输出奇怪的随机值
- python - 如何使用描述和不同的填充颜色数组在散景上绘制散点图?
- c++ - QopenGLWidget paintGL 仅由 resizeGL 触发
- r - flextable 包在没有 <- 的情况下分配更改
- scala - 检查自定义序列中是否存在特定键/值
- python - 如何在 OpenCV2 中将 float32 图片写入视频文件?
- angular - 角度模拟服务器响应数据的更好方法?
- http - 是什么导致 nginx & (node / express) 在从上游读取响应标头时抛出错误:(104: Connection reset by peer)