如果房间数据库中发生更改,Kotlin Flow 每次都会发出新数据吗?

gul*_*tel 6 android android-room android-livedata kotlin-flow

假设这是示例代码

实时数据查询

Query("SELECT IFNULL(COUNT(id),0) FROM Item WHERE status = :status")
fun getLiveData(status: Int): LiveData<Int>
Run Code Online (Sandbox Code Playgroud)

Kotlin 流查询

@Query("SELECT IFNULL(COUNT(id),0) FROM Item WHERE status = :status")
fun getFlowData(status: Int): Flow<Int>
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,如果房间数据库中发生任何变化,Flow 会获取新数据吗?

Moh*_*jeb 5

是的,如果房间数据库中发生任何更改,Flow 会发出新数据,如下例所示:

val flow = getFlowData(2) // type Flow<Int>
flow.collect { data ->
    // every time anything changes, the code inside collect is going to get called again
}
Run Code Online (Sandbox Code Playgroud)

还有,它.first()只会为您提供最新发出的数据,而不会进行实时更改:

val data = getFlowData(2).first() // type Int
Run Code Online (Sandbox Code Playgroud)

所以这取决于你如何使用 Flow,也取决于你的需求。