Epoxy库中的自动比较是基于DiffUtil吗?

Posted

技术标签:

【中文标题】Epoxy库中的自动比较是基于DiffUtil吗?【英文标题】:Is the automatic comparison in the Epoxy library based on DiffUtil? 【发布时间】:2021-11-28 18:03:13 【问题描述】:

我在寻找有关RecyclerView 的信息时遇到了Epoxy library

Epoxy 是一个使RecyclerView 更易于使用的库。

我还没有将它应用到我的应用中,但我认为如果我应用它会更容易。

因为我使用的RecyclerView是基于two view types的,而且这两个item都是dynamically added/removed频繁(DiffUitl也用到了)。

但是,在阅读Epoxy library in Git的描述时,

我遇到了以下情况:

此外,Epoxy 增加了对保存视图状态和自动区分项目更改的支持。

我很好奇automatic diffing 你在这里谈论的工作基于什么。 是内部DiffUtil 还是简单的notifyDatasetChanged()

如果它使用DiffUtil,那么我将使用Epoxy,否则我会考虑。

【问题讨论】:

【参考方案1】:

或者只是 notifyDatasetChanged()?

他们没有按照documentation 使用notifyDatasetChanged()

Epoxy 的自动差异化以减少开销,同时还有效地仅更新更改的视图。


内部是 DiffUtil

DiffUtil 用于EpoxyController class,但不用于EpoxyAdapter class,documentation 表示:

android 支持库类 DiffUtil 用于在 环氧树脂控制器。由于遗留原因,较旧的 EpoxyAdapter 使用 用于差异的自定义解决方案。

所以,当您仍在设计您的应用程序时,我希望您将使用EpoxyController 而不是旧版EpoxyAdapter;因此,DiffUtil 已被使用。


如果它使用 DiffUtil 那么我将使用 Epoxy 或者我会考虑它

这取决于你;一般来说,使用库在连续性、安全性、局限性、复杂性等方面各有利弊。

【讨论】:

@ybybyb 是的,它已被ExpoxyController 取代。你也可以检查main components of expoxy here ..This is a recent tutorial 。对于equals() or hashCode() 部分我不确定.. 但我当您在 ExpoxyController 中构建模型时,认为它们会自动实现它们。让我检查一下是否能找到一些东西 @ybybyb 使用库是一件好事,它只需几行代码就可以为您提供一些功能;而如果你自己写,它可能会占用数百行代码或其他东西,所以它为你节省了时间;但是您可能会在库中遇到无法修复的错误(例如,由于库的某些错误,您的应用程序可能会在某些客户端崩溃,因此您必须等到他们更新它...如果库是停产(即不再更新),那么您必须将整个解决方案更改为其他解决方案,这会使您失去客户 但总的来说,您可以依赖大型提供的库来继续修复错误,并将它们的依赖项更新到最近的 android 版本,我猜 expoxy 就是其中之一。我看到他们刚刚更新了它12 天前。 非常感谢您非常详细的回复。它有很大帮助。我决定第一次尝试图书馆。当然,我不知道它是否会按预期工作,但无论如何谢谢:) @ybybyb 刚刚遇到一个库,它给客户端带来了运行时问题;希望这将是您了解图书馆缺点的一个方面的机会。Check out the comments

以上是关于Epoxy库中的自动比较是基于DiffUtil吗?的主要内容,如果未能解决你的问题,请参考以下文章

Epoxy——RecyclerView的绝佳助手

Android详解7.0带来的新工具类:DiffUtil

DiffUtil和它的差量算法

您可以播放 iPod 库中的视频吗?

DiffUtil 重绘 ListAdapter Kotlin 中的所有项目

DiffUtil 不刷新观察者调用android kotlin中的视图