java - 我是否需要关闭 addOnSuccessListener 才能保存到数据库(setValue)?

标签 java android firebase firebase-realtime-database

这个blog中有提到

If a listener is registered like this in an Activity, and it's not removed before the Activity is destroyed, there is a possibility of an Activity leak.

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

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

最佳答案

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

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

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

但请记住,onDestroy不会总是被调用,因此最后一个选项并不总是一个好的选择。

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

Adds an Activity-scoped listener that is called if the Task completes successfully.

The listener will be called on the main application thread. If the Task has already completed successfully, a call to the listener will be immediately scheduled. If multiple listeners are added, they will be called in the order in which they were added.

The listener will be automatically removed during onStop().

关于java - 我是否需要关闭 addOnSuccessListener 才能保存到数据库(setValue)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56556122/

相关文章:

android - 使用 MPAndroidChart 自定义 XAxis 标签

android rxjava 重复请求

android - 在 Android 中发送带附件的电子邮件。适用于 Gmail 但不适用于 Outlook

ios - Firebase,获得具有特定值(value)的 child 的直接 parent

javascript - 更新 Firebase 时如何更新 HTML 表格?

java - 通过 IIS 通过 ISAPI 或 URL 重写公开 Java Web 应用程序

Java 参数传递和引用

java - Glassfish 4 - 使用并发 API 创建托管线程

javascript - 访问 firebase firestore v9 中的子集合

java - 在 ConstraintLayout 上使用 animateLayoutChanges 时出现小故障