【发布时间】:2019-12-07 08:34:04
【问题描述】:
我有一个 Android 订餐应用程序,我在其中向用户显示每家餐厅的菜单。然后用户可以下订单,这会通知相应的餐厅老板。在应用程序中,假设有 5 家餐厅,每家有 50 种食物。
每个食物都是一个文档,我使用 FirestoreRecyclerViewAdapter 获取菜单:
private void createQueriedRecyclerView(Query query) {
FirestoreRecyclerOptions<ModelFoodItem> options = new FirestoreRecyclerOptions.Builder<ModelFoodItem>()
.setQuery(query, ModelFoodItem.class)
.build(); //get query into the adapter
mMenuAdapter = new FoodAdapter(options, v.getContext());
mMenuRecyclerView = v.findViewById(R.id.recyclerViewFoods);
mMenuRecyclerView.setHasFixedSize(true); //just for performance reasons
mMenuLayoutManager = new LinearLayoutManager(getContext());
mMenuRecyclerView.setLayoutManager(mMenuLayoutManager);
mMenuRecyclerView.setAdapter(mMenuAdapter);
mMenuRecyclerView.setItemAnimator(new DefaultItemAnimator());
mMenuAdapter.startListening();
}`
用户在搜索要订购的东西时自然会在每家餐厅中循环。我的问题是:每次打开 Fragment 时 Firestore 都会拉取文档吗?如果是这样,我非常担心这里的定价。菜单只需要加载一次,有没有办法缓存它,这样我就不会每次都调用文档读取,因为用户杀死并使用相同的菜单再次重新启动片段?
也许我不应该在每次片段被杀死时调用 MenuAdapter.stopListening()。它会影响性能,但每个菜单只会加载一次,是这样吗?
您对保持文档读取尽可能低并可能缓存读取值以免再次读取它有什么建议?
提前致谢
【问题讨论】:
标签: android google-cloud-firestore nosql