Нужно ли закрывать addOnSuccessListener для сохранения в базе данных (setValue)? - PullRequest
0 голосов
/ 12 июня 2019

Упоминается в этом блоге

Если слушатель зарегистрирован таким образом в Activity, и это не удалено до уничтожения Действия, существует возможность Активность утечки.

Должен ли я удалить этот прослушиватель для сохранения данных в базе данных реального времени в onStop()? или он будет автоматически удален после операции сохранения?

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

Ответы [ 2 ]

2 голосов
/ 12 июня 2019

Говоря о прослушивателях базы данных Firebase в реальном времени, да, вам нужно удалить их в соответствии с жизненным циклом вашей активности.

Если ваш слушатель будет активным, вы в конечном итоге будете тратить ресурсы.Итак:

  1. Если вы добавили слушателя в onStart, вы должны удалить его в onStop.
  2. Если вы добавили слушателя в onResume, вы должныудалите его в onPause.
  3. Если вы добавили слушателя в onCreate, вы должны удалить его в onDestroy.

Но помните onDestroy - это not всегда вызывается, поэтому последний вариант не всегда является удачным выбором.

Самый простой способ удаления списка состоит в том, чтобы передать методу addOnSuccessListener() в качестве первого аргумента экземплярвашей деятельности.Для этого, пожалуйста, см. Task addOnSuccessListener (Activity Activity, слушатель OnSuccessListener) :

Добавляет прослушиватель в области действия, который вызывается, если Задача успешно завершается.

Слушатель будет вызываться в главном потоке приложения.Если Задача уже успешно завершена, вызов к слушателю будет немедленно запланирован.Если добавлено несколько слушателей, они будут вызываться в том порядке, в котором они были добавлены.

Слушатель будет автоматически удален во время onStop () .

1 голос
/ 12 июня 2019

В блоге рассказывается, что вам нужно сделать, чтобы предотвратить утечку активности.Вы можете удалить его самостоятельно или использовать прослушиватель с заданной областью действия (передавая действие в качестве первого аргумента в addOnSuccessListener()), который автоматически удаляется при уничтожении действия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...