Android/Coroutine
Coroutine + ViewModelScope
${Harvey}
2022. 11. 22. 17:50
MainActivity.kt
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val goToSecond = findViewById<Button>(R.id.gotoSecond)
goToSecond.setOnClickListener{
val intent = Intent(this,SecondActivity::class.java)
startActivity(intent)
}
}
}
SecondActivty.kt
class SecondActivity : AppCompatActivity() {
lateinit var viewModel: SecondViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_second)
viewModel = ViewModelProvider(this).get(SecondViewModel::class.java)
viewModel.a()
viewModel.b()
}
}
SecondViewModel.kt
class SecondViewModel : ViewModel(){
fun a(){
CoroutineScope(Dispatchers.IO).launch{
for(i in 0..10){
delay(1000)
Log.d("SecondViewModel A",i.toString())
}
}
}
fun b(){
viewModelScope.launch {
for(i in 0..10){
delay(1000)
Log.d("SecondViewModel B",i.toString())
}
}
}
}
결과: ViewModelScope는 Activity가 종료되면 즉시 중단되지만 CoroutineScope는 Activity가 종료되어도 지속된다.
