如何在应用启动时预加载Firestore数据?

时间:2019-03-05 08:06:26

标签: java android google-cloud-firestore

我正在构建一个应用程序,该应用程序跟踪附近咖啡店的位置,并允许用户查看每个咖啡店的可用产品。我正在使用Firestore存储每个产品的所有数据,并通过recyclerview + firestoreRecyclerAdapter向用户展示此数据。有用。但是,产品数据的加载速度非常慢。花费几秒钟甚至几分钟来加载recyclerview。即使在回收站完全加载后,此问题仍然存在。

现在,我认为这是因为他从数据库读取的内容正在使主UI线程超载。因此,我尝试在asyncTask中执行这些读取操作,但是我无法从asyncTask中提取值,因为它在活动请求后会输出数据。给我一个错误。

我尝试减少从Firestore提取的数据量。但这也无济于事。

我正在考虑尝试在应用启动时尝试将所有产品数据从Firestore加载到共享首选项,内部存储或某种程序包中。这样,不需要将请求发送到服务器。这样,服务器可以用作更新此数据的方式,而不是连续尝试检索它的方式。

但是,我不知道该怎么做。加载的Firestore数据如何说出一个自定义对象,如何将该自定义对象列表保存到一个数组中,然后提供某种方式供此数据加载并稍后访问?

1 个答案:

答案 0 :(得分:0)

Firestore数据库默认情况下为移动平台启用了脱机持久性。这意味着它将保存加载的数据以及您在缓存中查询的内容。尝试阅读 https://firebase.google.com/docs/firestore/manage-data/enable-offline。 也不要尝试将数据保存在共享首选项中,它被设计为包含存储在键/值对中的小块数据。 更具体地说,我认为性能问题出在您的代码中。

我会建议几件事:将代码的实现从适配器转移到活动/片段(只需创建接口,您就可以使用这些接口在适配器中的项目上打开新的活动/片段/ onClick等)< / p>

我也强烈建议使用Livedata + ViewModel,它对解决性能问题有很大帮助。查看此博客https://firebase.googleblog.com/2017/12/using-android-architecture-components.html。它帮助我理解了原理并在代码中实现了它。祝你好运!