gpt4 book ai didi

android - Firebase Android : What is the difference between getting callback from DatabaseReference's setValue via Task and DatabaseReference. CompletionListener?

转载 作者:行者123 更新时间:2023-11-29 19:21:11 24 4
gpt4 key购买 nike

我使用的是后 Google I/O 2016 Firebase 数据库。

DatabaseReference 上,有两个类似的方法,似乎只是完成回调不同。

一个是void setValue(Object value, DatabaseReference.CompletionListener listener) , 另一个是 Task<Void> setValue(Object value) .

它们可以互换吗?文档对此没有任何说明,而且 Firebase Android SDK 是闭源的。

最佳答案

它们几乎可以互换。 setValue 返回的 Task 与传递的 CompletionListener 之间的主要区别在于能够避免对象泄漏。

当您将 CompletionListener 传递给 setValue 时,Firebase SDK 将无限期保留该对象引用(以及所有对象的强引用,等等),直到数据最终写入服务器端。对于 Android 应用程序,这可能特别成问题,因为您最终可能会泄漏 Activity 引用,这是非常昂贵的。

当您使用任务时,您可以根据需要在那个中添加和删除监听器,因此如果您不再想知道写入是否成功,您可以释放以前感兴趣的对象。在 Android 中,有用于添加监听器的重载,当 Activity 停止时自动让监听器自行删除,因此您不必自己安排这样做。

借助 Tasks,您还可以安排在特定执行器上调用回调,这是将繁重的工作转移到另一个线程的便捷方式。使用 CompletionListener,您必须在回调本身中自行安排。

我有一个 four-part blog series在 Play 服务和 Java admin SDK 提供的任务上。还有formal documentation .

关于android - Firebase Android : What is the difference between getting callback from DatabaseReference's setValue via Task and DatabaseReference. CompletionListener?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42432558/

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