首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否需要关闭addOnSuccessListener以保存到数据库(SetValue)?

是否需要关闭addOnSuccessListener以保存到数据库(SetValue)?
EN

Stack Overflow用户
提问于 2019-06-12 06:46:33
回答 2查看 897关注 0票数 0

在本博客中提到了

如果侦听器在活动中这样注册,并且在活动被销毁之前未被删除,则存在活动泄漏的可能性。

我是否应该删除此侦听器,以便在onStop()中保存实时数据库中的数据?或者在保存操作之后会自动删除它吗?

代码语言:javascript
运行
复制
    databaseReference.setValue(chatMessage)
            .addOnSuccessListener(new OnSuccessListener<Void>() {
                @Override
                public void onSuccess(Void aVoid) {
                    // Codes for successful!                        
                }
            });
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-12 06:52:48

当谈到Firebase实时数据库侦听器时,是的,您需要根据活动的生命周期相应地删除它们。

保持侦听器活动,最终会浪费资源。所以:

  1. 如果您在onStart中添加了侦听器,则必须在onStop中删除它。
  2. 如果您在onResume中添加了侦听器,则必须在onPause中删除它。
  3. 如果您在onCreate中添加了侦听器,则必须在onDestroy中删除它。

但是请记住,not总是调用onDestroy,所以最后一个选项并不总是一个好的选择。

删除lister的最简单方法是将addOnSuccessListener()方法作为第一个参数传递给您的活动的实例。有关这一点,请参见任务的addOnSuccessListener(活动活动,OnSuccessListener侦听器)

添加一个在任务成功完成时调用的活动范围侦听器。 将在主应用程序线程上调用侦听器。如果任务已成功完成,将立即安排对侦听器的调用。如果添加了多个侦听器,则将按照添加的顺序调用它们。 侦听器将在()期间被自动删除。

票数 2
EN

Stack Overflow用户

发布于 2019-06-12 06:51:45

博客还会告诉你你需要做些什么来防止活动泄漏。您可以自己删除它,也可以使用活动范围内的侦听器(将活动作为addOnSuccessListener()上的第一个参数传递),该监听器在活动被销毁时会自动删除。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56556122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档