过去两周我一直在彻底使用和测试我的Android应用程序。
我在我的应用中彻底使用Firebase实时数据库,最重要的是,我的应用需要无缝脱机工作。
我有一个启动画面,我在启动和继续时同步特定用户节点的所有数据。
我肯定会使用keepSynced(true);
和setPersistenceEnabled(true);
。
注意到一个严重的问题,这导致了很多问题。
情景1
我第一次使用互联网连接运行应用程序,该应用程序正常运行。
场景2
我首次运行应用没有互联网连接,没有任何效果。没有回调被触发。
场景3
我连续运行应用程序有/无连接,它运行正常。
情景4
但是,当我在1或2天后运行应用没有互联网连接时,没有任何效果。没有回拨。
我似乎磁盘持久性被自动清除,这就是为什么数据不能脱机使用而且没有触发回调。
那么,如何控制何时清除磁盘持久性?有没有办法确保永远不会清除持久性?有没有办法配置磁盘持久性的大小呢?
修改
这就是我在我的应用程序类的onCreate()
中所做的。
private void initializeFirebaseDatabase() {
if (!FirebaseApp.getApps(this).isEmpty()) {
FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
firebaseDatabase.setPersistenceEnabled(true);
}
}
答案 0 :(得分:0)
检查此链接com.google.firebase.database.DatabaseException: Calls to setPersistenceEnabled() must be made before any other usage of FirebaseDatabase instance
我想这个问题与链接中的问题类似,并且已经解决了。
答案 1 :(得分:0)
我遇到了同样的问题,其中设置了setPersistenceEnabled(true)
启动画面,但是当我调用finish()
并尝试再次打开应用程序时出错了。
解决了它杀死应用程序而不是调用finish()
。
我使用OnBackPressed()
完成活动和Boolean isFinishing
标记,以区分将应用程序发送到后台并将其删除。
最后我用OnDestroy()
将其杀死:
android.os.Process.killProcess(android.os.Process.myPid());