我制作了一个Android应用程序,它从Firebase数据库接收实时数据。在我的主要活动中,用户必须使用电子邮件和密码登录,并通过成功打开一个新的活动,该活动接收数据。
似乎是,当用户离开我的应用程序时,Firebase连接仍然建立。这对电池不好。
如何管理关闭和重新打开应用程序的连接?我想我需要用onPause()
和onResume()
。我发现了一些像goOffline()
,但我不能在新的Firebase找到这个方法。
是的,您可以在onDestroy()
上使用onPause()
, onStop()
等活动生命周期方法来关闭您的连接。
此外,Firebase似乎仍然有一个goOffline()
方法- https://www.firebase.com/docs/android/api/#firebase_goOffline.
使用goOffline()
和goOnLine()
方法的另一种选择是在不再需要ValueEventListeners
和ChildEventListeners
时删除它们。我使用SDK 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上测试我的应用的人没有报告任何问题,所以这可能是一个棒棒糖问题。我将继续测试,这次尝试删除不必要的事务,看看这是否有帮助……