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가 종료되어도 지속된다.