如果应用被杀,Firebase不会同步离线缓存

时间:2016-11-30 05:27:32

标签: android caching firebase firebase-realtime-database

我正在设置离线持久性

FirebaseDatabase.getInstance().setPersistenceEnabled(true);

in an earlier post所述,但以下用例失败:

  1. 在手机上关闭互联网连接
  2. 尝试写入数据库
  3. 使用操作系统中的用户多任务菜单从内存中杀死应用
  4. 重新启用互联网连接
  5. 重新启动应用。 此时我希望通过恢复的网络连接将步骤2中的新记录发送到数据库,但这不会发生。(我的期望是否正确?)
  6. 示例代码:

    static{
        FirebaseDatabase.getInstance().setPersistenceEnabled(true);
    }
    
    void updateValue(){
        DatabaseReference dbRef = FirebaseDatabase.getInstance().getReference("mydb");
        dbRef.keepSynced(true);
        dbRef.setValue("123");
    }
    

    请注意,如果我没有从内存中删除应用程序缓存工作:

    1. 在手机上关闭互联网连接
    2. 尝试写入数据库
    3. 重新启用互联网连接
    4. 恢复网络连接后,新记录将发送到数据库。

2 个答案:

答案 0 :(得分:4)

根据firebase documentation

  

跨应用重新启动不会保留交易

     

即使启用了持久性,交易也不会持续存在   应用重启。所以你不能依赖离线完成的交易   致力于您的Firebase实时数据库。提供最好的用户   经验,您的应用程序应显示尚未保存事务   进入您的Firebase实时数据库,或确保您的应用   手动记住它们并在应用程序重新启动后再次执行它们。

答案 1 :(得分:2)

像魅力一样工作,看看我做了什么。

    ---应用离线时的操作---
 
  • 1。添加了4个条目
  •  
  • 2.应用被杀死
  •   
  • 3。编辑了1个条目
  •   
  • 4。应用被杀死
  •   
  • 5。删除一个条目
  •   
  • 6。应用被杀死
  •   
  • 7。应用这次通过互联网连接启动
  • 数据完美同步。我用了4行Firestore魔术

    FireBase Database

     //Firebase Database Magic lines
        val firebaseDatabase: FirebaseDatabase = FirebaseDatabase.getInstance()
        firebaseDatabase.setPersistenceEnabled(true)
        val firebaseDatabase: FirebaseDatabase= firebaseDatabase.getReference("Prakash")
        databaseReference.keepSynced(true)