본문 바로가기
개발/Android

Android에서 현재 함수가 어떤 스레드에서 돌고 있는지 확인하는 방법

by Dev Aaron 2020. 11. 8.
반응형

Android 앱 개발을 하다 보면 어지 간한 앱이라면 비동기 처리가 필수로 들어가게 됩니다.

이때 비동기 처리를 잘 알고 제대로 처리하지 않게 되면 벼레별 이슈를 다 맞이할 수 있습니다. 종종 특정 코드가 Main(UI) 스레드가 아닌 별도 백그라운드 스레드에서 돌길 원하는 경우가 있습니다. 그렇게 작성하고 돌려보니 실제로는 Main 스레드에서 도는 바람에 죽는 경우도 있고요. 이때 특정 함수, 코드가 어떤 스레드에서 도는지 확인하는 방법에 아주 간단한 방법이 있습니다.

바로 로그를 확인하는 것입니다.

2019-11-19 13:44:15.858 4032-4032/com.myapplication D/MainActivity: [My] startService
2019-11-19 13:44:15.864 4032-4510/com.myapplication D/TEST: [My] onHandleIntent

위와 같은 로그가 있습니다.
이때 로그 시간 뒤에 이상한 숫자 셋이 있습니다.

4032-4032
4032-4510

앞의 숫자가 process id,
뒤의 숫자가 thread id입니다

첫 번째 라인은 process id와 thread id가 동일한데요. 이는 해당 코드가 main thread에서 돌고 있음을 의미합니다. 이와 달리 두 번째 라인은 process id와 thread id가 다르며, 이는 main 스레드가 아닌 다른 스레드에서 호출되고 있음을 의미합니다.

실제로 두 번째 라인은 Intent Service의 onHandleIntent 함수 안에서 찍은 로그입니다.

이를 통해 간단히 로그를 찍어봄으로써 현재 코드가 main 스레드에서 도는지 여부를 체크할 수 있습니다.

반응형