Я создаю приложение с использованием Cloud Firestore.Я уже реализовал RecyclerView
с FirestoreRecyclerAdapter
и установил для него данные из коллекции.Прежде чем продолжить, мне нужно кое-что понять:
1. Обратно к локальной базе данных (sqlite3
, без LiveData) Firestore
отправляет запрос на устройство, когда происходит какое-либо изменение в базе данных, я прав?
2. Предполагая, что я был прав в «вопросе» выше.Когда я получаю данные в адаптер, как это:
В моей деятельности onCreate
:
val questions = FirebaseFirestore.getInstance().collection("DatabaseStructure")
val query = questions.orderBy("timestamp", Query.Direction.DESCENDING)
val options = FirestoreRecyclerOptions.Builder<DatabaseStructure>()
.setQuery(query, DatabaseStructure::class.java)
.build()
firestoreAdapter = FirestoreAdapter(options)
recyclerView.setHasFixedSize(true)
recyclerView.layoutManager = LinearLayoutManager(context)
recyclerView.adapter = firestoreAdapter
Мой класс данных:
data class DatabaseStructure(
val question: String = "",
val description: String? = "",
val image: String? = "",
val leftAnswers: Int = 0,
val rightAnswers: Int = 0,
val timestamp: com.google.firebase.Timestamp = com.google.firebase.Timestamp(Date()),
val userName: String? = "Anonymous")
Каждый раз, когда действие воссоздается, например, пользователи поворачивают устройство, возобновляют действие, данные извлекаются из облачного хранилища пожаров еще раз, даже если никаких изменений не произошло, я прав?Чтобы избежать этого, я должен использовать ViewModel тогда?
Предположим, что вопрос выше также был правдой, и я реализовал ViewModel для своего приложения, которое хранит данные из Cloud Firestore.Теперь, если появятся какие-либо изменения в базе данных, Firestore отправляет запрос на устройство для получения данных.Есть ли еще смысл наблюдать данные, используя LiveData
?
Подводя итог, какую модель лучше всего реализовать Firestore
без ненужного извлечения данных из базы данных, чтобы сделать ее наиболее эффективным способом и с наименьшими затратами энергии?
Заранее спасибо!