android - Android Firebase:OutOfMemoryError - 同步
问题描述
由于需要同步的大量数据,我的应用程序崩溃了。Firebase crashanalytics 告诉我:
Firebase 数据库遇到 OutOfMemoryError。您可能需要减少同步到客户端的数据量
我的代码是这样的:
public static DatabaseReference getRefFirebase() {
if (mDatabase == null) {
mDatabase = FirebaseDatabase.getInstance();
mDatabase.setPersistenceEnabled(true);
mDatabase.getReference().keepSynced(true);
}
return mDatabase.getReference();
}
所以它同步所有的数据库。我知道应用程序上的所有功能都不需要这样做,但我还不知道如何解决它。我找了一个 SYNC 请求,所以它只能同步一次,但显然 Firebase 没有这种方法。有人有类似的问题可以帮助我吗?
解决方案
使用您编写的代码,您要求 SDK 在每次发生更改时同步数据库的全部内容。这意味着内存的全部内容必须始终适合内存。这可能不是一个好主意,除非您知道您的数据库在大小上受到限制。
相反,请考虑始终保持数据库的一部分同步,并且只有在您始终了解其内存需求的情况下。如果数据库的一部分可以无限增长,您几乎可以肯定根本不想这样做。由于您还没有真正说出您的目标是什么,您可能需要考虑在您有一个明确的持续同步目标之前不要这样做。
即使您只同步一次(通过使用 addEventListenerForSingleEvent),引用的全部内容仍然需要一次完全放入内存中。因此,请仔细考虑您要在这里做什么。
推荐阅读
- javascript - 在 google maps api 中添加图层和样式
- python - 熊猫与一组滚动 groupby
- python - 必须提示用户输入字符串并选择要替换的字符
- api - 调用 api 的未来方法有时返回 null 有时不返回
- java - 在 Java 中使用 HTMLEditorKit,标签会忽略我的 CSS 样式(但文本可以接受样式)
- python - ValueError:尺寸必须相等,但输入形状为 20 和 320(对于“损失”):[1,320,320,20,12],[1,320,320,12]
- acumatica - 我们如何在 Acumatica 中为自定义新屏幕添加通用搜索
- python - python解释器如何构建对象
- r - 计算分组意味着忽略每一行的值
- reactjs - React 改变 SVG 组件颜色