반응형
Android Looper에 대해 알아보자
Looper
루퍼는 이벤트 루프와 메시지 큐의 레퍼런스를 가지고 있는 클래스로
쓰레드가 메시지큐에 접근할 수 있는 수단을 제공한다.
루퍼 클래스는 한 쓰레드당 오직 한 개만 존재할 수 있다.
worker 쓰레드가 생성된 후 main쓰레드와 메시지 통신을 하기 위해서는 반드시 루퍼를 생성해야 한다.
다음은 전형적인 루퍼를 가진 worker 쓰레드 구현의 예이다
looper의 prepare()메서드를 이용하여 looper객체 생성
//frameworks/base/core/java/android/os/Looper.java
static final ThreadLocal<Looper> sThreadLocal = new ThreadLocal<Looper>();
public static void prepare(){
//한 개의 쓰레드에 한 개의 루퍼만 존재하도록 제한.
if(sThreadLocal.get() != null){
throw new RuntimeException("Only one Looper may be create per thread")
}
//Looper 객체를 생성하여 TLS 영역에 저장
sThreadLocal.set(new Local())
}
위 코드처럼 Looper 객체가 생성되면 MessageQueue 객체도 함께 생성된다.
루퍼와 메시지 큐가 결합되면서 쓰레드 간에 메시지를 송/수신할 수 있는 기반이 마련된다.
Looper 클래스의 생성자
private Looper(){
mQueue = new MessageQueue()
mRun = true
mThread = Thread.currentThread()
}
생성된 루퍼 객체는 루퍼를 생성한 쓰레드의 TLS(Thread Local Storage)영역에 저장.
참조 :
반응형
'코틀린 & Java' 카테고리의 다른 글
[Kotlin] Object Class란? (0) | 2022.10.25 |
---|---|
[Kotlin] Data Class란? (0) | 2022.10.25 |
[Android] Java Stream에 대해 알아보자 (0) | 2022.10.24 |
[Android] 코틀린 확장 함수(kotlin extention)에 대해 알아보자 (0) | 2022.10.05 |
[Android] 가비지 컬렉터(Garbage Collector), 참조(Reference)에 대해 알아보자 (0) | 2022.09.21 |