Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
离开Android应用程序时关闭Firebase数据库连接_Android_Firebase_Database Connection_Firebase Realtime Database_Activity Lifecycle - Fatal编程技术网

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

离开Android应用程序时关闭Firebase数据库连接,android,firebase,database-connection,firebase-realtime-database,activity-lifecycle,Android,Firebase,Database Connection,Firebase Realtime Database,Activity Lifecycle,我制作了一个Android应用程序,它可以从中接收实时数据。在我的主要活动中,用户必须使用电子邮件和密码登录,如果成功,它将打开一个新活动,接收数据 看起来,当用户离开我的应用程序时,Firebase连接仍然建立。这对电池不好 如何管理关闭和重新打开应用程序的连接?我想我需要使用onPause()和onResume()。我找到了类似于goOffline(),但在新Firebase中找不到此方法。是的,您可以使用活动生命周期方法,如onPause(),onStop()ononDestroy()来关

我制作了一个Android应用程序,它可以从中接收实时数据。在我的主要活动中,用户必须使用电子邮件和密码登录,如果成功,它将打开一个新活动,接收数据

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


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

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


此外,Firebase似乎仍然有一个
goOffline()
方法-。

使用
goOffline()
goOnLine()
方法的替代方法是删除
ValueEventListeners
ChildEventListeners
。我的经验(仅适用于SDK 3.X)是Firebase将在大约1分钟后自动断开连接,当时没有注册侦听器,也没有其他连接原因,例如挂起的写入。

我最近将Firebase数据库添加到我的应用程序中,但偶尔会注意到电池使用率高,它似乎链接到我的应用程序,保持收音机处于活动状态(10小时内收音机处于活动状态1小时30分钟,但应用程序使用约5分钟)

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

我目前正在测试以下对暂停/恢复的简单添加(在答案中获得一些代码:-):

到目前为止,一切顺利。**需要注意的主要事项是切换活动,这要求您在使用Firebase的每个应用程序中都有此功能(我有一个登录活动,它在从数据库读取用户名时停止工作)**


2016年5月12日-测试两周后更新。昨天又出现了高电池使用率。我主要是在棒棒糖上测试,有很多人抱怨收音机被其他应用程序打开了。其他人在安卓M上测试我的应用程序时没有报告任何问题,所以可能是棒棒糖问题。我将继续测试,这次尝试删除不必要的事务,看看这是否有帮助。。。希望这对某人有所帮助。

是的,但这似乎只适用于“旧”firebase。我只有FirebaseApp类(com.google.firebase),没有.goOffline()。最新的firebase SDK中也存在同样的方法:@DenisBanach,我对此表示怀疑。否则Firebase会重组他们的文档以反映这一变化。啊,好的,谢谢,现在我找到了。但它在另一个类中:FirebaseDatabase.getInstance().getReference(“Time”).goOffline();在旧的SDK中,它是Firebase.goOffline(),正如我所理解的那样。@DenisBanach:我很想知道您更改的结果。事实上,当我上次测试它们时,我得到了不同的结果。如果你能对这个问题留下评论,我将不胜感激。对这个问题的一个更新-只是注意到我在前面使用持久化和胖手指时引用了数据库静态。。。如果(mFirebaseDatabase==null){FirebaseDatabase.getInstance().setPersistenceEnabled(true);mFirebaseDatabase=FirebaseDatabase.getInstance();}我想知道引用是否是静态的,那么数据库连接会自动关闭。因此,可能只有在使用静态引用时才需要goOffline()/goOnline()。如果我得到一个明确的答案,我会更新。。。必须学习如何使用堆栈流。道歉4天后,没有电池问题,所以我相信我的问题是通过消除数据库引用上的静电解决的
@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();
    }
}