离开 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()
方法的替代方法是删除 ValueEventListeners
和 ChildEventListeners
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 问题。我将继续测试,这次尝试删除不必要的事务,看看是否有帮助...希望这对某人有所帮助。
我制作了一个 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()
方法的替代方法是删除 ValueEventListeners
和 ChildEventListeners
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 问题。我将继续测试,这次尝试删除不必要的事务,看看是否有帮助...希望这对某人有所帮助。