Android Room DAO-如果两个生命周期感知者/非生命感知者都应该使用LiveData

问题描述 投票:0回答:1

在以下情况下,我们应将LiveData用作DAO接口中Query函数的返回结果:

  • 我们想在ViewModel中使用此功能(支持生命周期)
  • 我们想在数据库初始化程序中使用此功能(不支持生命周期)
  • 我们想在某种后台处理回调中使用它(不支持生命周期)

这里的最佳做法是什么?我们应该使用协程并将其转换为LiveData吗?我们应该使用rx吗?还是只创建两个具有不同返回结果类型的函数?

android rx-java android-room android-jetpack kotlin-coroutines
1个回答
0
投票

LiveData应该仅与生命周期一起使用,并且仅用于更新ui。始终在主线程中调用LiveData观察器。如果要执行其他代码,则应使用Flow作为Query函数的返回类型。使用Flow,您可以指定执行代码的协程分配器,并可以使用以下功能将其转换为LiveData:

liveData(Dispatchers.IO) {
    myFlow.collect {
        emit(it)
    }
}

也可以创建两种不同的方法。

© www.soinside.com 2019 - 2024. All rights reserved.