[英]Different between Android onResume(), onStart() and lifecycleScope
我有 viewmodel 調用 TestViewModel 和一個方法調用 fetchDataFromDataSource() 來調用從服務器獲取數據,我曾經在OnResume()上調用加載數據,直到遇到生命周期范圍
我試圖閱讀更多內容,但並沒有真正了解哪個更好。
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() 還是在生命周期范圍中,以及生命周期范圍相對於 onResume() 或 onStart() 的優勢是什么
我知道視圖已在 onResume() 呈現,所以生命周期范圍對 android 生命周期有什么好處(onResume onCreate onStart ...)
repeatOnLifecycle
類似於每次 Activity 命中 state 時調用相應生命周期事件的方法,但可以快速訪問可以啟動coroutine
的lifecycleScope
范圍。
例子:
override fun onResume(){
super.onResume()
viewModel.fetchDataFromDataSource()
}
相當於 -
class MainActivity : AppCompatActivity {
init {
lifecycleScope.launch {
repeatOnLifecycle(Lifecycle.State.RESUMED) {
viewModel.fetchDataFromDataSource()
}
}
}
}
如果您希望每次用戶從后台進入前台時都從ViewModel
加載數據,請使用onStart
或repeatOnLifecycle(Lifecycle.State.STARTED)
。
如果您需要在每次Activity
resumes時加載數據,請使用onResume
或如上所示的生命周期范圍等效項,但如果這只是一次性操作,請考慮使用onCreate
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.