【问题标题】:firebase info/connected onDataChange 1 minute false no responsefirebase info/connected onDataChange 1 分钟 false 无响应
【发布时间】:2016-06-18 22:54:50
【问题描述】:

我在onCreate 中调用了以下代码来跟踪用户是否连接到firebase/是否可以连接到firebase:

    DatabaseReference connectedRef = FirebaseDatabase.getInstance().getReference(".info/connected");
    connectedRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot snapshot) {
            connected = snapshot.getValue(Boolean.class);
        }
        @Override
        public void onCancelled(DatabaseError error) {
            connected = false; // not called in the observations below
        }
    });

观察到的行为:

A.初始化时:

  • onDataChange 在 connected 设置为 false 的情况下被调用
  • onDataChange 被调用,并且随后将 connected 设置为 true(假设有 Internet 连接)

B. 1分钟前:

  • 关闭 wifi 或数据会导致已连接设置为 false
  • 打开 wifi 或数据会导致已连接设置为 true

C. 1 分钟时

  • connected 通过 onDataChange 设置为 false

D. 1分钟后

  • 无论是否使用 wifi/data,都不会调用 onDataChange

预期行为:

A'。和A一样

B'。和B一样

C'。什么都没有

D'。和 B 一样。

我看到了其他有关丢失身份验证的问题,但我没有在我的日志中看到身份验证问题。此外,一分钟的精确时间似乎非常具体,在其他类似的问题/答案中没有看到。 请注意,我使用的是 firebase 9.0.2。

【问题讨论】:

    标签: android firebase connection


    【解决方案1】:

    根据我在 9.0.2 上观察到的情况,连接会在一分钟后在不需要时关闭。保持连接打开会不必要地耗尽电池。

    在以下情况下需要连接:

    1. DatbaseReference.setValue() 被执行。
    2. Query.addListenerForSingleValueEvent() 被执行
    3. ValueEventListenerChildEventListener 已添加但未删除

    连接关闭后,列出的事件之一将导致它重新打开。对于事件 1 和 2,连接将在一分钟后再次关闭。添加监听器后(不是单个值),连接保持打开状态,直到监听器被移除。

    【讨论】:

    • “.info/connected”上的侦听器是否算作需要 web-socket 保持打开状态的侦听器?
    • 据我观察,不,不算数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-23
    • 1970-01-01
    • 2020-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多