离开 Android 个应用时关闭 Firebase 数据库连接

Close Firebase database connection when leaving Android app

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

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

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

是的,您可以使用 activity 生命周期方法,例如 onPause()onStop() on onDestroy() 来关闭您的连接。

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

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

我最近将 Firebase 数据库添加到我的应用程序中,但偶尔会发现电池使用率很高,而且它似乎与我的应用程序相关联,以保持收音机处于活动状态(收音机在 10 小时内激活 1 小时 30 分钟,但应用程序使用约 5 分钟)。

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

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

@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 的应用程序中都有这个(我有一个登录 activity,它停止运行,因为它正在从数据库中读取用户名)**

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