【问题标题】:Close Firebase database connection when leaving Android app离开 Android 应用时关闭 Firebase 数据库连接
【发布时间】:2016-12-18 14:43:47
【问题描述】:

我制作了一个 Android 应用程序,它接收来自 Firebase database 的实时数据。在我的主要活动中,用户必须使用电子邮件和密码登录,然后成功打开一个新活动,该活动接收数据。

似乎,当用户离开我的应用程序时,Firebase 连接仍然建立。这对电池不利。

如何管理关闭和重新打开应用程序的连接?我想我需要使用onPause()onResume()。我找到了类似goOffline() 的东西,但是我在新的 Firebase 中找不到这种方法。

【问题讨论】:

    标签: android firebase database-connection firebase-realtime-database activity-lifecycle


    【解决方案1】:

    是的,您可以使用onDestroy() 上的onPause()onStop() 等活动生命周期方法来关闭您的连接。

    此外,Firebase 似乎还有一个 goOffline() 方法 - https://www.firebase.com/docs/android/api/#firebase_goOffline

    【讨论】:

    • 是的,但这似乎只适用于“旧”firebase。我只有类 FirebaseApp (com.google.firebase),没有 .goOffline()
    • 最新的 Firebase SDK 中存在相同的方法:firebase.google.com/docs/reference/android/com/google/firebase/…
    • @DenisBanach,我对此表示怀疑。否则 Firebase 会重组他们的文档以反映这种变化。
    • 啊,好的,谢谢,现在我找到了。但它在另一个类中: FirebaseDatabase.getInstance().getReference("Time").goOffline();据我了解,在旧版 SDK 中它是 Firebase.goOffline()。
    • @DenisBanach:我很想知道您的更改结果。实际上有two ways to go offline,当我上次测试它们时,我得到了不同的结果。如果您能对这个问题发表评论,我将不胜感激。
    【解决方案2】:

    使用goOffline()goOnLine() 方法的替代方法是删除ValueEventListenersChildEventListeners when they are no longer needed。我的经验(仅使用 SDK 3.X)是 Firebase 将在大约 1 分钟后自动断开连接,此时没有注册监听器并且没有其他连接原因,例如挂起的写入。

    【讨论】:

      【解决方案3】:

      我最近将 Firebase 数据库添加到我的应用程序中,但偶尔会注意到电池使用率很高,并且它似乎与我的应用程序相关联,使无线电保持活跃(无线电在 10 小时内活跃了 1 小时 30 分钟,但应用程序使用量约为5分钟)。

      我相信这与 Firebase 数据库相关联,因为我已禁用应用内购买广播接收器,这是唯一的其他网络元素。我没有任何开放的侦听器(我正在使用单值事件),但有些事务是可变的,因此其中一个事务可能无法完成,并且会定期重试。数据库持久性已关闭。

      我目前正在测试以下对暂停/恢复的简单添加(必须在答案中获取一些代码 :-)):

      @Override
      protected void onResume()
      {
          super.onResume();
      
          if (FirebaseDatabase.getInstance() != null)
          {
              FirebaseDatabase.getInstance().goOnline();
          }
      }
      
      @Override
      public void onPause() {
      
          super.onPause();
      
          if(FirebaseDatabase.getInstance()!=null)
          {
              FirebaseDatabase.getInstance().goOffline();
          }
      }
      

      到目前为止,一切都很好。 ** 需要注意的主要事情是切换活动,要求您在每个使用 Firebase 的应用程序中都有此功能(我有一个登录活动,它在从数据库中读取用户名时停止运行)**

      5/12/16 - 经过几周的测试后更新。昨天电池使用率高。我主要在 Lollipop 上进行测试,并且有很多关于收音机对其他应用程序开放的投诉。其他人在 Android M 上测试我的应用程序没有报告任何问题,所以这可能是棒棒糖问题。我将继续测试,这次尝试删除不必要的交易,看看是否有帮助...希望这对某人有所帮助。

      【讨论】:

      • 对此进行了一次更新 - 只是注意到我对数据库的引用是静态的,因为我之前使用的是持久性,并且
      • 胖手指... if(mFirebaseDatabase==null) { FirebaseDatabase.getInstance().setPersistenceEnabled(true); mFirebaseDatabase = FirebaseDatabase.getInstance(); }
      • 我想知道如果引用不是静态的,那么数据库连接会自动关闭。所以也许只有在使用静态引用时才需要 goOffline() / goOnline() 。如果我得到明确的答案,我会更新......必须学习如何使用 Stack Oveflow。道歉
      • 4 天后,没有电池问题,所以我相信通过删除数据库引用上的静态问题解决了我的问题
      猜你喜欢
      • 2019-03-05
      • 2018-02-10
      • 1970-01-01
      • 2019-03-14
      • 2022-06-10
      • 2015-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多