gpt4 book ai didi

android - NotifyDataSetChanged- RecyclerView - 是异步调用吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:50:12 48 4
gpt4 key购买 nike

在 recyclerview 上执行 notifyDataSetChanged 后,我试图遵循一组语句。但是当我调试我的应用程序时,调试器会在我的 notifyDataSetChanged 之后到达接下来的几行,然后再转到 recyclerview 适配器的 onBindViewHolder。所以我的问题是- notifyDataSetChanged 是异步调用吗?如果是,我们会收到回调吗?PS:我已经用谷歌搜索了这个答案,但我找不到合适的答案,这就是我问社区的原因。

最佳答案

RecyclerView作者在这里,

当您调用 notifyDataSetChanged 时,RecyclerView 会使数据无效但不会更新 UI,直到下一个动画帧。这就是 android View 系统的工作原理。当小部件无效时(例如更改其数据),它请求布局,这意味着它将在下一次 View 遍历中重新测量和重新布局。这样做是为了让我们可以批处理所有更改,直到下一次屏幕更新为止。这就是 notifyDataSetChange 不会立即触发 onBind 的原因。

是的,您可以将其称为异步调用,但这并不意味着您可以多线程运行它(这是两个完全不同的概念)。您仍然必须在主线程上对您的适配器进行所有更改。当你改变适配器时,你必须立即通知 RecyclerView,这就是为什么通知也必须在主线程上。

此限制的原因是如果数据集在布局期间更改,布局管理器很难恢复到稳定状态(例如想象 RecyclerView 调用 onBind(5)并且项目 5 同时在另一个线程中被删除)。此外,考虑到此类更改将需要大量同步,这将是一个很大的性能损失,没有任何好处。这就是为什么所有 UI 组件都是单线程的。

关于android - NotifyDataSetChanged- RecyclerView - 是异步调用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36467236/

48 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com