我发现当用户使用onDisconnect
关闭应用程序时,我可以处理,但无法正常工作。
我想做的只是在用户关闭设备或关闭应用程序时删除一个节点。但是即使关闭模拟器,数据库也永远不会改变。
mBaseNode = FirebaseDatabase.getInstance().getReference().child(...);
mBaseNode.child("aValue").onDisconnect.removeValue();
mBaseNode.addValueEventListener()...
我可能对onDisconnect
有误解。我这是怎么了?
答案 0 :(得分:2)
其背后的原因是onDestroy()
常常根本没有被提及。通常,系统只是在没有任何回调的情况下终止了进程。知道何时触发onDestory()
有点棘手。
主要在客户端和服务器断开连接时触发。
当客户端和服务器断开连接时,可能会发生两种情况:
终止应用程序时,将触发显式断开连接。在这种情况下,客户端将向服务器发送断开连接的信号,并且服务器将立即执行onDisconnect()
回调。
当您关闭wifi时,您的应用程序没有机会告诉服务器它正在断开连接。在这种情况下,一旦服务器检测到客户端已离开,onDisconnect()
将触发。
这甚至可能要花费几分钟,具体取决于套接字超时的配置方式。因此,在这种情况下,您只需要多一点耐心即可,这意味着它在您的实际应用中看起来不会很好。
因此,我建议您删除活动的onPause()
方法中的值,例如:
@Override
protected void onPause() {
super.onPause();
final DatabaseReference rRef = FirebaseDatabase.getInstance().getReference().child(toBeDeleted);
rRef.child(yourWishChild).removeValue();
}