【发布时间】:2017-05-19 17:07:22
【问题描述】:
作为 Android 和 Firebase 的初学者,我最需要的是意见,而不是代码。让我描述一下情况,然后我有两个问题。
我正在创建一个应用程序来存储有关“绘画”的信息,并且我希望用户能够根据他们选择的一些颜色来搜索绘画。
我的数据库有几个节点,有问题的是:
颜色:存储所有颜色的位置。每个条目的形式为 UID->"Name":"Blue"
ColoursToPaintings:每个颜色 UID 下都有一个绘画对象。
绘画:存储所有绘画的地方。每幅画都有一个名称、photourl(通向 firebase 存储)、包含所有颜色和其他信息的数组。
我这样做的方式是(流程):
应用程序启动,用户可以从 Firebase 颜色节点选择应用程序中加载的颜色(大约 1000 种颜色)。他们搜索例如。 5 种颜色。
我执行了一个 for 循环来动态创建对 ColoursToPaintings 的引用,这样我就可以获取这些节点 (2000) 绘画下的所有绘画 UID。
然后我在这 2000 个绘画 UID 中执行另一个循环以创建对绘画节点的引用,以便我可以获取包含所有信息的实际绘画。
所有这些画都显示在一个recyclerView列表和照片中(照片是用Glide加载实现延迟加载的)。
问题 1: 上述方法是否正确?我应该设计数据库/应用程序的另一种方式吗?
到目前为止,虽然上述方法似乎按预期工作,但如果我选择产生许多结果的许多颜色,我会收到“跳过 40 帧可能主线程上的工作太多”的问题。这导致问题 2。
问题 2: 假设使用 Firebase 完成的所有事情都在一个单独的线程中完成(是真的吗?)。我所做的所有工作不应该被视为“背景”任务吗?我什至尝试创建单独的 AsyncTask,但仍然出现跳帧。
关于问题2。是否会导致跳帧,因为每次从数据库中获取绘画时,我将其添加到ArrayList,然后我在适配器上περφορμ notifyDataSetChanged()。 notifyDataSetChanged() 会很昂贵并导致问题吗?
提前致谢。
【问题讨论】:
-
你找到解决这个问题的方法了吗??我的应用也跳过了帧
标签: android firebase firebase-realtime-database