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吗?的主要内容,如果未能解决你的问题,请参考以下文章