当我的应用程序离线并且我正在添加或更新文档时,内存会增加。此外,显示文档列表需要更长的时间来加载。如果我在设备在线时运行相同的代码,内存将保持一致以及具有文档列表的活动的速度。
我目前正在做如下保存:
collectionRef.document(id).set(obj, SetOptions.merge());
Run Code Online (Sandbox Code Playgroud)
或者批处理几个记录:
batch.set(docRef1, obj1);
batch.set(docRef2, obj2);
batch.commit();
Run Code Online (Sandbox Code Playgroud)
我有 onComplete 的听众,但在这个问题的公认答案中,似乎表明在大多数情况下听众是不必要的,而且当您离线时,无论如何您都无法等待它完成。
在另一个问题中,他们在代码中指出正确执行在线和离线保存需要“快照”:Firestore 与 Firebase 的离线问题。但我找不到其他任何地方表明这是否会有所作为。我认为快照是当您希望收到更改通知时附加到文档或查询的东西,并且附加这样的侦听器如果不删除它会导致内存泄漏。
所有这一切的另一部分是这种缓慢可能如何影响数据完整性。当我在 Android Studio 的分析器中观看时,我看到 FirestoreWorker 可以达到持续工作的程度,即使我没有在应用程序中执行任何操作。我说的不只是几秒钟,更像是一分钟。当我可以找到离线时,没有任何写入顺序保证。尝试停止并重新启动应用程序似乎对缓慢没有任何影响(尽管它会重置内存)。
所以所有这些都引出了一个问题:离线时在 Firestore 中添加/更新数据的正确方法是什么,以便应用程序的内存不会无限增长并减慢速度?