[英]I am confused with how lifecycleScope in android studio works
我對 flow.collect 的工作方式感到困惑。 因為在下面的生命周期范圍中,我已經說過 a 應該由我的數據庫中的數據值分配。 但是,a 的值仍然是字符串“Hi”而不是“Hello”。
class MainActivity : AppCompatActivity() {
private var binding: ActivityMainBinding? = null
private var a: String = "Hi"
override fun onCreate(savedInstanceState: Bundle?) {
binding = ActivityMainBinding.inflate(layoutInflater)
super.onCreate(savedInstanceState)
setContentView(binding?.root)
val somethingDao = SomethingDatabase.getDatabase(this).somethingDao()
lifecycleScope.launch {
somethingDao.insert(SomethingModel("Hello"))
somethingDao.fetchAllSomething().collect {
a = it[it.size - 1].name
}
}
println(a)
}
}
這是我數據庫中的所有信息
LifecycleScope.launch 將啟動一個協程,為簡單起見,lifecycleScope.launch 中的代碼將在另一個線程中執行,插入數據並從數據庫中讀取數據需要一些時間,但println(a)在主線程上,所以它將在此行之前執行a = it[it.size - 1].name ,因此您的println(a)應該像這樣在生命周期范圍內:
class MainActivity : AppCompatActivity() {
private var binding: ActivityMainBinding? = null
private var a: String = "Hi"
override fun onCreate(savedInstanceState: Bundle?) {
binding = ActivityMainBinding.inflate(layoutInflater)
super.onCreate(savedInstanceState)
setContentView(binding?.root)
val somethingDao = SomethingDatabase.getDatabase(this).somethingDao()
lifecycleScope.launch {
somethingDao.insert(SomethingModel("Hello"))
somethingDao.fetchAllSomething().collect {
a = it[it.size - 1].name
println(a)
}
}
}
}
注意:查看 kotlin 協程以更好地理解
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.