【发布时间】:2021-08-10 09:28:20
【问题描述】:
这是我的代码:
HomeFragment
...
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
homeViewModel.myTest.observe(viewLifecycleOwner) {
Log.d(TAG, "myTest=$it")
}
lifecycleScope.launch {
homeViewModel.doSomethingForMyTest()
}
}
...
HomeViewModel
...
private val _myTest = MutableLiveData<String>()
val myTest: LiveData<String> = _myTest
fun doSomethingForMyTest() {
Log.i(TAG, "doSomethingForMyTest start: ${System.currentTimeMillis()}")
(1..3).forEach {
_myTest.value = it.toString()
}
Log.i(TAG, "doSomethingForMyTest end: ${System.currentTimeMillis()}")
}
...
log:
I/HomeViewModel: doSomethingForMyTest start: 1628586904976
I/HomeViewModel: doSomethingForMyTest end: 1628586904977
D/HomeFragment: myTest=3
如果在调用函数之前添加延迟,如下所示:
HomeFragment
...
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
homeViewModel.myTest.observe(viewLifecycleOwner) {
Log.d(TAG, "myTest=$it")
}
lifecycleScope.launch {
delay(1)
homeViewModel.doSomethingForMyTest()
}
}
...
log:
I/HomeViewModel: doSomethingForMyTest start: 1628587129413
D/HomeFragment: myTest=1
D/HomeFragment: myTest=2
D/HomeFragment: myTest=3
I/HomeViewModel: doSomethingForMyTest end: 1628587129414
如你所见,我不知道有什么区别......
为什么日志不同?
【问题讨论】: