首页 > 解决方案 > 我是否需要关闭 addOnSuccessListener 才能保存到数据库(setValue)?

问题描述

在这个博客中提到

如果一个监听器是这样注册在一个Activity中的,并且在Activity销毁之前没有被移除,那么就有可能发生Activity泄漏。

我应该删除此侦听器以将数据保存在实时数据库中onStop()吗?还是会在保存操作后自动删除?

    databaseReference.setValue(chatMessage)
            .addOnSuccessListener(new OnSuccessListener<Void>() {
                @Override
                public void onSuccess(Void aVoid) {
                    // Codes for successful!                        
                }
            });

标签: javaandroidfirebasefirebase-realtime-database

解决方案


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

让你的听众保持活跃,你最终会浪费资源。所以:

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

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

删除列表器的最简单方法是将addOnSuccessListener()您的活动实例作为第一个参数传递给该方法。为此,请参阅 Task 的addOnSuccessListener(Activity activity, OnSuccessListener listener)

添加一个 Activity 范围的侦听器,如果 Task 成功完成,则调用该侦听器。

侦听器将在主应用程序线程上调用。如果任务已经成功完成,将立即安排对侦听器的调用。如果添加了多个监听器,它们将按照添加的顺序被调用。

在 onStop() 期间监听器将被自动删除。


推荐阅读