코틀린 & Java

[Android] Looper에 대해 알아보자

코딩하는후운 2022. 10. 24. 08:59
반응형

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)영역에 저장.

 

 

참조 :

http://blog.naver.com/PostView.nhn?blogId=horajjan&logNo=220963043229&parentCategoryNo=&categoryNo=10&viewDate=&isShowPopularPosts=false&from=postView 

 

[안드로이드] 루퍼(Looper) 클래스 내부 구조

'안드로이드 하드웨어 서비스, 1장'을 인용하였다 메시지(Message)는 핸들러(Handler)에게 보내진다고 해...

blog.naver.com

 

반응형