동일한 쓰레드에서 실행되는 경우는 동기식, 다른 쓰레드에서 실행되는 경우는 비동기로 볼 수 있는데, 안드로이드에서는 많은 경우가 메인쓰레드에서 백그라운드 쓰레드로 전환하는경우입니다. 물론 백그라운드 쓰레드를 여러개 생성해 쓰레드간에 왔다 갔다 할 수도 있지만, 메인쓰레드에서 백그라운드 쓰레드로 전환하는 경우를 흔히 접하게 됩니다. 이 때 동기식 처리방식은 처리가 끝날 때까지 메인 쓰레드를 사용하면서 UI를 블록시키게 되지만 비동기 방식을 그렇지 않습니다. 아래 함수는 현재 쓰레드가 메인쓰레드인지 아닌지 체크하는 함수입니다.
fun isMainThread(): Boolean {
return Looper.myLooper() == Looper.getMainLooper()
}
아래처럼 현재 쓰레드 이름을 체크할 수도 있습니다. 메인쓰레드에서 실행 중이라면 MainThread라는 이름을 볼 수 있습니다.
Thread.currentThread().getName()
안드로이드에서 어떤 방법들로 비동기를 구현하는지 아래 블로그에 정리가 되어 있네요.
https://medium.com/android-news/8-ways-to-do-asynchronous-processing-in-android-and-counting-f634dc6fae4e