Java Firebase实时数据库:如何使用onDisconnect
我发现当用户使用Java Firebase实时数据库:如何使用onDisconnect,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我发现当用户使用onDisconnect关闭应用程序时,我可以处理,但它并没有像我预期的那样工作 我想做的只是在用户关闭设备或关闭应用程序时删除一个节点。但即使关闭模拟器,数据库也从未改变 mBaseNode = FirebaseDatabase.getInstance().getReference().child(...); mBaseNode.child("aValue").onDisconnect.removeValue(); mBaseNode.addValueEventListener
onDisconnect
关闭应用程序时,我可以处理,但它并没有像我预期的那样工作
我想做的只是在用户关闭设备或关闭应用程序时删除一个节点。但即使关闭模拟器,数据库也从未改变
mBaseNode = FirebaseDatabase.getInstance().getReference().child(...);
mBaseNode.child("aValue").onDisconnect.removeValue();
mBaseNode.addValueEventListener()...
我可能会误解有关断开连接的信息。这有什么不对?这背后的原因是,
onDestroy()
通常根本不被调用。通常,系统只是在没有任何回调的情况下终止进程。知道何时会触发onDestory()
,有点棘手
它主要在客户端和服务器断开连接时触发
当客户端和服务器断开连接时,可能会发生两种情况:
onDisconnect()
回调
当你关闭wifi时,你的应用程序没有机会告诉服务器它正在断开连接。在这种情况下,onDisconnect()
将在服务器检测到客户机不在时触发
这甚至可能需要几分钟,具体取决于套接字超时的配置方式。因此,在这种情况下,你只需要多一点耐心,这意味着它在你真正的应用程序中看起来并不好
因此,我建议您删除活动的onPause()
方法中的值,如下所示:
@覆盖
受保护的void onPause(){
super.onPause();
final DatabaseReference rRef=FirebaseDatabase.getInstance().getReference().child(toBeDeleted);
rRef.child(yourWishChild.removeValue();
}
这背后的原因是,onDestroy()
通常根本不被调用。通常,系统只是在没有任何回调的情况下终止进程。知道何时会触发onDestory()
,有点棘手
它主要在客户端和服务器断开连接时触发
当客户端和服务器断开连接时,可能会发生两种情况:
onDisconnect()
回调
当你关闭wifi时,你的应用程序没有机会告诉服务器它正在断开连接。在这种情况下,onDisconnect()
将在服务器检测到客户机不在时触发
这甚至可能需要几分钟,具体取决于套接字超时的配置方式。因此,在这种情况下,你只需要多一点耐心,这意味着它在你真正的应用程序中看起来并不好
因此,我建议您删除活动的onPause()
方法中的值,如下所示:
@覆盖
受保护的void onPause(){
super.onPause();
final DatabaseReference rRef=FirebaseDatabase.getInstance().getReference().child(toBeDeleted);
rRef.child(yourWishChild.removeValue();
}
我认为onPause
不是在用户关闭设备或关闭应用程序时发生的。onPause()。所以你可以在不同的活动中使用onPause()
来实现你的东西。你是说完成一项活动?或者甚至开始一项新的活动?@nani两者都有,因为离开一项活动意味着完成一项活动或开始另一项活动。但是您可以在启动的新活动开始时重置所需节点的值。实际上,我不想在启动新活动时删除该节点。我只想在完成活动时执行此操作。我认为onPause
发生在用户关闭设备或关闭应用程序时除外。onPause()
会在用户离开特定活动时触发。所以你可以在不同的活动中使用onPause()
来实现你的东西。你是说完成一项活动?或者甚至开始一项新的活动?@nani两者都有,因为离开一项活动意味着完成一项活动或开始另一项活动。但是您可以在启动的新活动开始时重置所需节点的值。实际上,我不想在启动新活动时删除该节点。我只想在活动结束时做。