반응형
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 스레드에서 도는지 여부를 체크할 수 있습니다.
반응형
'개발 > Android' 카테고리의 다른 글
[Android] Service – 2. 기본 콜백 함수 (0) | 2020.11.08 |
---|---|
[Android] Service – 1. 기본 사항 (+ 주의할 점) (0) | 2020.11.08 |
Android에서 Context는 대체 무엇인가? (0) | 2020.11.08 |
Android Runtime – 컴파일러 차이점 (JIT Vs. AOT) (0) | 2020.11.08 |
[Android] 앱 프로세스와 안드로이드 프레임워크와의 관계 (0) | 2020.11.08 |