스레드관련

스레드 구조

스레드 - 루퍼 - 핸들러

루퍼와 핸들러로 스레드간의 통신을 한다.

핸들러는 요청을 받아서 큐에넣는다.

루퍼는 큐에서 하나씩 뽑아서

핸들러에게 처리하라고 던져준다

다른스레드 » 핸들러로요청 » 루퍼의QUQUE »핸들러로전달 » 처리

9e902d19aff119ebb6c9b91fdfe5ea3d.png

스레드는 하나의 Looper를 가지며

Looper는 하나의 message queue를가짐

스레드에서 looper, handler를 생성할때 둘을 연결함

스레드종류

HandlerThread exends thread «.start를 호출해서 스레드 생성, looper와 handler를 멤버로가짐

Servicethread extends handlerthread « 서비스 스레드 종료되면 안되는것들

UI스레드

모든 UI관련 처리를 하는 singleton 스레드

ui에서 지연이 생기면 상호작용이 멈추기때문에

ui스레드 이외엔 ui에 접근할수없게해놓음

메인스레드 (UI스레드)

frameworks/base/core/java/android/app/ActivityThread.java

activitythread.java 클래스이며

88f15be361e592cf20234b8b5aad5e5c.png

public static void main(string[] args)

메인함수가있음

앱이 시작될때 생성되며,

사용자에게 보여지는 UI 접근, 업데이트를 UI스레드에 요청.

컴포넌트(액티비티, 서비스, 브로드캐스트 리시버, Application) 처리를담당.

다른스레드 클래스들

Displaythread 화면관리 스레드 ,

이 스레드를 사용하는 클래스는 displaymanager, inputmanager , windowmanager 뿐임

Connectivitythread :: 네트워크 관련

Backgroundtheread :: 백그라운드 태스크관련

surfaceview :: view 자체가 스레드인 view

동기화

구현 메서드가 여러 스레드로부터 접근되는경우

주로 원격호출에서 발생

ibinder호출이 binder와 동일한 프로세스이면 호출자의 스레드에서 실행

만약 다른프로세스로부터의 호출이면 다른프로세스의 호출도 현재 스레드에서 실행됨