Использование JetPack Room в качестве кеша в памяти для совместного использования состояния в нескольких действиях - PullRequest
0 голосов
/ 27 января 2019

Я сейчас пытаюсь реализовать совместное использование состояний (например, в твиттере) в нескольких действиях.Например, совместное использование состояния like в активности списка, а также в операции подробностей.

Моя идея на данный момент состоит в том, чтобы вернуть LiveData из репозитория и подписать его в обоих действиях, которые выглядят как в кеше памяти, реализованном с использованием LiveData.Репозиторий будет как ниже.(Это не настоящий код, но я думаю, легко представить, как он работает)

class PostRepository {
  val postCache : MutableLiveData<List<Post>> = MutableLiveData()

  fun getAll(): List<Post> {
    val posts = source.getAll() // source is something like api or real db
    postCache.value = posts
    return posts
  }

  fun like(id: String){
    postCache.value.map { post ->
      if(post.id == id){
        post.like = true
      }
    }

    source.like(id)
  }
}

Когда я нахожу в памяти db для документа Room in Room (https://developer.android.com/reference/android/arch/persistence/room/Room#inmemorydatabasebuilder), Я думаю, что этоможет быть полезно использовать Room in-memory db в качестве кеша, так как он может возвращать LiveData и также может уведомлять об обновлении db. Но в документе, похоже, что db in-memory только для тестирования.

Поэтому у меня такой вопрос: может ли Room in-memory db быть хорошим решением для реализации кэша? А если нет, то есть ли лучший способ, чем использовать объект LiveData.

...