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

时间:2016-08-11 18:17:03

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

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

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

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

3 个答案:

答案 0 :(得分:2)

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

此外,似乎Firebase仍然采用goOffline()方法 - https://www.firebase.com/docs/android/api/#firebase_goOffline

答案 1 :(得分:0)

使用goOffline()goOnLine()方法的替代方法是删除ValueEventListenersChildEventListeners when they are no longer needed。我的经验(仅限SDK 3.X)是Firebase将在大约1分钟后自动断开连接,然后没有注册听众,也没有其他原因需要连接,例如待处理的写入。

答案 2 :(得分:0)

我最近将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上测试我的App并没有报告任何问题,所以它可能是一个Lollipop问题。我将继续测试,这次尝试删除不必要的交易,看看这是否有帮助...希望这有助于某人。