본문 바로가기

개발 코딩 정보 공유/안드로이드 자바 코틀린

안드로이드 쓰레드 실체 파악하기

 

 

 

안드로이드 쓰레드 실체 파악

 

 

쓰레드 너란 녀석

 

 

 

오늘은 자바내의 쓰레드 기본적인 사용법과 디테일하게 실체를 파악해 보겠습니다.

 

사실 안드로이드개발에서 쓰레드의 실체는 리눅스의 그것 과 일치합니다.

 

아래의 이미지를 확인해보면 이유를 알수 있습니다.

 

 

 

 

 

계층 구조를 보시죠. 앱개발단 자체는 리눅스 커널을 베이스로 하고 있습니다. 때문에 앱 단의 쓰레드 또한 네이티브 pthread 를 기반합니다. 안드로이드는 pthread와 다르게 표현하려고 특별한 속성을 부여합니다.

 

 

 

1.UI 쓰레드 

 

UI쓰레드는 응용프로그램의 시작과 끝을 같이 합니다. 화면에 구성요소를 실행/변경하고 이를 메인쓰레드 라고도 합니다. UI요소에 타 쓰레드가 접근하게 되면 바로 Exception을 보실수 있습니다. 오직 메인쓰레드만이 UI 조작이 가능합니다.

 

 

 

2. 백그라운드 쓰레드

 

앱개발시 명시적으로 생성하는 모든 쓰레드는 백그라운드 스레드 입니다. 백그라운드 쓰레드는 UI쓰레드 자체에서 파생되기 때문에 UI스레드의 속성등을 그대로 가져가게 됩니다. (우선순위등)

 

 

 

 

 

사실은 운영체제 입장에서 UI쓰레드와 백그라운드 쓰레드는 구분이 없습니다.

 

둘다 일반적인 그저 쓰레드 일 뿐이죠. UI쓰레드 라는 특정 속성은 리눅스가 아닌 안드로이드 응용단에 의해 강제된다는 사실! 안드로이드에서 많은 비동기 처리 방식을 제공하지만 내부적으로는 결국 동일한 쓰레드 처리를 할 뿐입니다. 

 

 

 

자. 그럼 쓰레드를 사용해보고 ADB 를 통해 리눅스 명령어를 사용해서 쓰레드를 확인해보겠습니다.

 

 

Thread t = new Thread(new Runnable() {

    private int i = 0;

    @Override

    public void run() {

        while(i<100){

            i++;

            Log.i("Count Tag","i====="+i);

            try {

                Thread.sleep(1000);

            }catch(Exception e){

                //ignore

            }

        }

    }

});

t.setName("CuteThread");

t.start();

 

 

 

쓰레드를 실행하기 전에 우선 콘솔창을 띄워서 sdk/platform-tools/ 로 이동하겠습니다.

자신의 개발환경마다 위치가 다르니 아래와 같이 참고 해서 찾아보세요.

 

 

 

 

 

이동하고 나서 콘솔창에 명령어를 입력합니다.

 

adb shell ps -a | grep CuteThread

 

어때요? 자신의 쓰레드가 보이시나요? 

UID PID PPID 등의 정보도 볼수 있습니다.

이런식으로 user 필터링해서 보실수 있겠죠.

제 앱실행시 쓰이는 쓰레드들이 전부 표시됩니다.

 

 

 

 

어떤가요 확실히 내 쓰레드가 잘 돌고 있는가?! 확인 할 수 있었습니다. 더 쉽게 안드로이드 스튜디오 디버깅 창을 이용해도 되지만 ADB 를 사용해서 확인해보았습니다. (ADB 잘쓰면 좋습니다.)

그럼 이만!