Android的onResume()、onStart()和lifecycleScope不同



我有一个视图模型调用TestViewModel和一个方法调用fetchDataFromDataSource((来调用从服务器获取数据,我过去常常在OnResume((上调用加载数据,直到我遇到lifecycleScope

我试着读更多的书,但没有真正明白哪本更好。

class TestViewModel: Viewmodel() {
fun fetchDataFromDataSource(){
....
}
}


class TestActivity : AppCompatActivity() {
private val viewModel: TestViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
...
lifecycleScope.launch {
repeatOnLifecycle(Lifecycle.State.STARTED) {
// Is it best to call here 
viewModel.fetchDataFromDataSource()
}
}
}
onResume(){
super.onResume()
// or is it best to call here 
viewModel.fetchDataFromDataSource()
}

}

调用fetchDataFromDataSource((的最佳位置在哪里?它在onResume((或lifecycleScope中吗?lifecycleSscope与onResume((或onStart((相比有什么优势

我知道这个视图已经在onResume((上呈现了,那么lifecycleScope对android生命周期有什么好处(onResume-onCreate-onStart…(

repeatOnLifecycle类似于每次"活动"达到该状态时对相应生命周期事件调用方法,但可以快速访问可以启动coroutinelifecycleScope

示例:

override fun onResume(){
super.onResume()
viewModel.fetchDataFromDataSource()
}

相当于-

class MainActivity : AppCompatActivity {
init {
lifecycleScope.launch {
repeatOnLifecycle(Lifecycle.State.RESUMED) {
viewModel.fetchDataFromDataSource()
}
}
}
}

如果希望每次用户从后台进入前台时都从ViewModel加载数据,请使用onStartrepeatOnLifecycle(Lifecycle.State.STARTED)

如果每次Activity恢复时都需要加载数据,请使用onResume或等效的lifecycleScope,如上所示,但如果这只是一次操作,请考虑使用onCreate

最新更新