每次打开片段时,Firestore都会提取文档吗?

时间:2019-12-07 08:34:04

标签: android google-cloud-firestore nosql

我有一个Android的食物订购应用程序,在这里我向用户显示每个餐厅的菜单。然后,用户可以下订单,通知相应的餐厅老板。在该应用中,假设每个餐厅有5家餐厅和50种食品。

每个食品项目都是一个文档,我使用FirestoreRecyclerViewAdapter这样获得菜单:

private void createQuerriedRecyclerView(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()。这样会影响性能,但每个菜单只能加载一次,是这样吗?

您有什么建议使文件读取尽可能低,并可能缓存读取值以免再次读取?

预先感谢

1 个答案:

答案 0 :(得分:0)

Firestore客户端SDK已经为您缓存了文档,因此,如果以前已阅读过该文档,则不会花费任何费用,并且在脱机时也可以使用。请阅读documentation