База данных Firebase в реальном времени: как использовать onDisconnect - PullRequest
0 голосов
/ 30 октября 2018

Я обнаружил, что могу справиться, когда пользователь закрывает приложение, используя onDisconnect, но оно не работает, как я ожидал.

Что я хочу сделать, это просто удалить узел, когда пользователь выключит устройство или закроет приложение. Но база данных никогда не менялась, даже когда я выключал эмулятор.

mBaseNode = FirebaseDatabase.getInstance().getReference().child(...);
mBaseNode.child("aValue").onDisconnect.removeValue();
mBaseNode.addValueEventListener()...

Я мог бы неправильно понять onDisconnect. Что я не так с этим?

1 Ответ

0 голосов
/ 30 октября 2018

Причина этого в том, что onDestroy() часто вообще не вызывается. Часто система просто убивает процесс без каких-либо обратных вызовов. Знать, когда onDestory() будет уволен, немного сложно.

Срабатывает, главным образом, когда клиент и сервер отключены.

Существует два случая, когда клиент и сервер отключены:

  1. клиент явно отключается от сервера
  2. клиент просто исчезает

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

Когда вы выключаете Wi-Fi, ваше приложение не может сообщить серверу, что оно отключается. В этом случае onDisconnect() сработает, как только сервер обнаружит, что клиент ушел.

Это может даже занять несколько минут, в зависимости от того, как настроены тайм-ауты для сокетов. Так что в этом случае вам просто нужно быть немного более терпеливым, что означает, что в вашем реальном приложении это будет выглядеть не очень хорошо.

Поэтому я бы посоветовал вам удалить значение в onPause() методе вашей деятельности, например:

@Override
    protected void onPause() {
        super.onPause();

        final DatabaseReference rRef = FirebaseDatabase.getInstance().getReference().child(toBeDeleted);

        rRef.child(yourWishChild).removeValue();


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