簡體   English   中英

Android onResume()、onStart() 和生命周期范圍的區別

[英]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 時調用相應生命周期事件的方法,但可以快速訪問可以啟動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 resumes時加載數據,請使用onResume或如上所示的生命周期范圍等效項,但如果這只是一次性操作,請考慮使用onCreate

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM