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

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

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


我可能会误解onDisconnect。我有什么错吗?

最佳答案

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

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

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


客户端明确断开与服务器的连接
客户就消失了


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

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

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

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

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

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

        rRef.child(yourWishChild).removeValue();


    }

10-08 15:14