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

时间:2019-06-12 06:46:33

标签: java android firebase firebase-realtime-database

blog

中已提及
  

如果在活动中以这种方式注册了侦听器,则不是   在活动销毁之前删除,有可能   活动泄漏。

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

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

2 个答案:

答案 0 :(得分:2)

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

让监听器保持活动状态,最终将浪费资源。所以:

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

但是请记住,onDestroy总是被称为 not ,因此最后一个选项并不总是一个好的选择。

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

  

添加一个活动范围侦听器,如果任务成功完成,则将调用该侦听器。

     

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

     

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

答案 1 :(得分:1)

该博客会继续告诉您确切的操作,以防止活动泄漏。您可以自己删除它,也可以使用活动范围侦听器(将活动作为addOnSuccessListener()的第一个参数传递),该监听器在活动被破坏时会自动删除。