Firebase实时数据库:如何使用onDisconnect

时间:2018-10-30 13:38:04

标签: java android firebase firebase-realtime-database

我发现当用户使用onDisconnect关闭应用程序时,我可以处理,但无法正常工作。

我想做的只是在用户关闭设备或关闭应用程序时删除一个节点。但是即使关闭模拟器,数据库也永远不会改变。

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

我可能对onDisconnect有误解。我这是怎么了?

1 个答案:

答案 0 :(得分:2)

其背后的原因是onDestroy()常常根本没有被提及。通常,系统只是在没有任何回调的情况下终止了进程。知道何时触发onDestory()有点棘手。

主要在客户端和服务器断开连接时触发。

当客户端和服务器断开连接时,可能会发生两种情况:

  1. 客户端明确断开与服务器的连接
  2. 客户只是消失了

终止应用程序时,将触发显式断开连接。在这种情况下,客户端将向服务器发送断开连接的信号,并且服务器将立即执行onDisconnect()回调。

当您关闭wifi时,您的应用程序没有机会告诉服务器它正在断开连接。在这种情况下,一旦服务器检测到客户端已离开,onDisconnect()将触发。

这甚至可能要花费几分钟,具体取决于套接字超时的配置方式。因此,在这种情况下,您只需要多一点耐心即可,这意味着它在您的实际应用中看起来不会很好。

因此,我建议您删除活动的onPause()方法中的值,例如:

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

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

        rRef.child(yourWishChild).removeValue();


    }