我制作了一款Android应用,可以从Firebase database接收实时数据。在我的主要活动中,用户必须使用电子邮件和密码登录,并且成功后会打开一个新的活动,它接收数据。
似乎是,当用户离开我的应用时,仍会建立Firebase连接。这对电池来说不好。
如何管理关闭和重新打开应用的连接?我想我需要使用onPause()
和onResume()
。我找到了类似goOffline()
的内容,但我在新的Firebase中找不到此方法。
答案 0 :(得分:2)
是的,您可以使用onPause()
上的onStop()
,onDestroy()
等活动生命周期方法来关闭您的连接。
此外,似乎Firebase仍然采用goOffline()
方法 - https://www.firebase.com/docs/android/api/#firebase_goOffline。
答案 1 :(得分:0)
使用goOffline()
和goOnLine()
方法的替代方法是删除ValueEventListeners
和ChildEventListeners
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问题。我将继续测试,这次尝试删除不必要的交易,看看这是否有帮助...希望这有助于某人。