Android Firebase连接检测在60秒后不工作

Android Firebase连接检测在60秒后不工作,android,firebase,firebase-realtime-database,kotlin,Android,Firebase,Firebase Realtime Database,Kotlin,正如一些答案所解释的: 在Android上,Firebase自动管理连接状态以减少带宽和电池使用。当客户端没有活动侦听器,没有挂起的写入或onDisconnect操作,并且没有通过goOffline方法显式断开连接时,Firebase会在60秒不活动后关闭连接 问题是在60年代之后,甚至在我使用一个全新的引用、事件监听器等进行活动之后。。它仍然说它是断开的,而事实上它不是 val connectedRef = FirebaseDatabase.getInstance().getReference

正如一些答案所解释的:

在Android上,Firebase自动管理连接状态以减少带宽和电池使用。当客户端没有活动侦听器,没有挂起的写入或onDisconnect操作,并且没有通过goOffline方法显式断开连接时,Firebase会在60秒不活动后关闭连接

问题是在60年代之后,甚至在我使用一个全新的引用、事件监听器等进行活动之后。。它仍然说它是断开的,而事实上它不是

val connectedRef = FirebaseDatabase.getInstance().getReference(".info/connected")
var connectListener : ValueEventListener? = null

fun checkConnection() {
    connectListener = connectedRef.addValueEventListener(object : ValueEventListener {
        override fun onDataChange(snapshot: DataSnapshot) {
            val connected = snapshot.getValue(Boolean::class.java)!!
            if (connected) {
                Log.d("FRAG", "CONNECTED")
            else{
                Log.d("FRAG", "DISCONNECTED")
            }
        }

        override
        fun onCancelled(error: DatabaseError) {
            System.err.println("Listener was cancelled")
        }
    })
}

override fun onDetach() {
    super.onDetach()
    if (connectListener != null){
        connectedRef.removeEventListener(connectListener)
    }
}

如何确保维护或创建到Firebase的新连接?我调用
checkConnection
方法,每个
onAttach
一个片段和
onStart
一个活动。

如果您对从服务器读取的任何数据有一个活动的侦听器,除非您在代码中显式调用了
goOffline()
,否则连接应该保持打开。请注意,
.info/connected
本身不需要从服务器读取,因此不会保持连接打开


您似乎正在使用实时数据库在基于Firestore的应用程序上构建状态系统。在这种情况下:CloudFireStore使用基于gRPC的协议在客户端和服务器之间进行通信,而Firebase实时数据库使用web套接字。它们根本不相容,甚至不可比。保持Firestore中数据的活动侦听器不会保持与RTDB的连接处于打开状态。这就是为什么还将实际的数据节点写入实时数据库。

I如果从服务器读取的任何数据都有活动侦听器,则连接应保持打开状态,除非您在代码中显式调用了
goOffline()
。请注意,
.info/connected
本身不需要从服务器读取,因此不会保持连接打开。这听起来有点像:我感觉整个
.info/connected
和超时都是些骗人的东西。你能描述一下真正的根本问题是什么吗?@FrankvanPuffelen,我只想让它跟踪连接状态。因此,如果我停留在X屏,关闭wifi/互联网连接,X屏应该显示“无互联网连接”视图。如果我再次打开连接,它将淡出“无internet连接”视图。问题在于60秒后它不再跟踪连接状态。我们不要只关注60秒的设置,因为行为取决于多个因素。如果您关闭wifi/internet,过一段时间后,您在
connectedRef
上的侦听器应以“false”值启动。这不是真的吗?还是比你想象的要晚?在60秒内一切正常。在此之后,它只是断开连接并保持值为
false
。奇怪的行为是,为了解决这个问题,我会删除frag和onDestroy活动的
onDetach
上的侦听器,然后将其分别放在
OnTach
/
onStart
上,它会工作一段时间,但有时它会显示为断开连接。所以,整个问题是,当听同一个监听器时,60秒后它总是指向断开连接(connected=
false
)。续订侦听器时,有时它也会保持断开状态。如果您只有
.info/connected
上的侦听器,则不会保持与服务器的连接。这是故意的。