본문으로 바로가기

[Android] Dispatchers.Main과 MainThread

category AndroidStudio 2022. 6. 1. 16:19

Coroutine은 Dispatcher를 통해 어떤 스레드에서 작업 할 것인지 정해진다.

 

Dispatchers.Main 컨텍스트를 사용하여 CoroutineScope를 실행했을 때 실제로 MainThread에서 동작하는지 알아보기 위해 테스트 해보았다.

 

class MainActivity2 : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main2)

        CoroutineScope(Dispatchers.Main).launch {
            Log.d("TEST_LOG", "Main Dispatchers is called")
            CoroutineScope(Dispatchers.IO).launch {
                Log.d("TEST_LOG", "IO Dispatchers is called")
            }
        }

        Log.d("TEST_LOG", "Main Thread is called")

        Thread {
            Log.d("TEST_LOG", "thread is called")
            runOnUiThread {
                Log.d("TEST_LOG", "runOnUiThread is called")

            }
        }.start()
    }
}

테스트를 위해서 MainThead, runOnUiThead, Dispatchers.Main, Dispatchers.IO에서 각각의 로그를 찍어보았다.

 

2022-06-01 16:09:02.126 12285-12285/com.example.lala_coroutine D/TEST_LOG: Main Thread is called
2022-06-01 16:09:02.133 12285-12307/com.example.lala_coroutine D/TEST_LOG: thread is called
2022-06-01 16:09:02.136 12285-12285/com.example.lala_coroutine D/TEST_LOG: Main Dispatchers is called
2022-06-01 16:09:02.139 12285-12309/com.example.lala_coroutine D/TEST_LOG: IO Dispatchers is called
2022-06-01 16:09:02.154 12285-12285/com.example.lala_coroutine D/TEST_LOG: runOnUiThread is called

 

출력된 로그를 확인해본 결과

runOnUiThread, Dispatchers.Main, MainThread는 같은 TID(therad-id)를 가지고 있고 이들 모두가 MainThread를 사용하고 있음을 알 수 있다.

 

다른 Thread에서 찍힌 TID는 당연히 MainThread와 다를 것임을 예상해볼 수있었고, Dispatchers.IO에서 출력된 TID역시 다른 것을 보아 Dispatchers.IO는 MainThread가 아닌 IO작업에 최적화된 위한 별도의 Thread를 Coroutine에 할당해 줌을 알 수있다.

 

'AndroidStudio' 카테고리의 다른 글

[Android] Coroutine Builder - Async  (0) 2022.06.01
[Android]코틀린 Coroutine  (0) 2022.05.31
AndroidStudio, 잠자기 모드  (0) 2020.08.13
일정관리 앱에 푸시알림 추가하기  (0) 2020.08.12