如何在Android应用程序被杀死时处理脱机firebase数据库?

时间:2016-06-20 12:57:58

标签: android firebase firebase-realtime-database

我是第一次使用firebase,阅读有关firebase的离线功能,测试了两种情况:

方案1(正常工作):

  1. 离线模式,将数据写入firebase数据库。

  2. 按后退按钮(关闭应用程序)

  3. 上线,数据被添加到firebase数据库。
  4. 方案2(不工作):

    1. 离线模式,将数据写入firebase数据库
    2. 关闭应用
    3. 从后台删除应用程序(杀死应用程序)
    4. 上线,数据未添加
    5. 我添加了这一行:

      Firebase.getDefaultConfig().setPersistenceEnabled(true);
      

      如何处理方案2?我是否需要通过本地数据库处理这种情况?

3 个答案:

答案 0 :(得分:0)

我猜你使用一些服务来同步数据,它不适用于第二种情况。为此,当用户打开数据服务时,您将收到一个广播接收器,该检查服务未运行,然后启动该服务。

答案 1 :(得分:0)

您使用的是Firebase.getDefaultConfig().setPersistenceEnabled(true);keepSynced(true)吗?

因为在Firebase documentation中说keepSynced(true)发生了“神奇”的事情(与setPersistenceEnabled(true)一起发生):

  

通过在某个位置调用keepSynced(true),该位置的数据将自动下载并保持同步,即使没有为该位置连接侦听器也是如此。此外,当一个位置保持同步时,它不会被永久磁盘缓存驱逐

因此,如果您没有使用它,那么您不是在本地持久保存数据库,然后当您“杀死”应用程序时,将无法从您的应用程序再次打开时查询任何数据库。

答案 2 :(得分:0)

无需使用本地数据库处理方案2。在应用程序类中使用Firebase.getDefaultConfig()。setPersistenceEnabled(true)并使android:name =" yourapplicationclass"在清单文件中。 在更改网络时处理同步,即在线/离线使用事务处理程序来处理本地同步到firebase数据库,因为一些tome数据没有被推送到firebase服务器。就像我在网络中使用改变方法并解决了这个问题:

mDatabase.runTransaction(new Transaction.Handler() {
            @Override
            public Transaction.Result doTransaction(MutableData mutableData) {
                if(mutableData.getValue() == null) {
                    mutableData.setValue(1);
                } else {
                    mutableData.setValue((Long) mutableData.getValue() + 1);
                }
                return Transaction.success(mutableData); //we can also abort by calling Transaction.abort()
            }

            @Override
            public void onComplete(DatabaseError databaseError, boolean b, DataSnapshot dataSnapshot) {

            }
        });