본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[Android/안드로이드] Looper 에 대해 알아봅시다.

by 돼지왕 왕돼지 2012. 2. 18.
반응형


안녕하세요. 돼지왕 왕돼지입니다.
오늘은 루퍼 ( Looper ) 에 대해 한번 알아보겠습니다.


루퍼가 뭔가요?


  : 메세지는 스레드간의 신호이므로 handler에 보낸다고 해서 곧바로 처리되는 것이 아닙니다동시다발적으로 메세지가 발생할 수 있기 때문에 메세지 큐(Message Queue)에 쌓았다가 처리합니다. 큐(Queue)에 들어있는 내용을 하나하나 꺼내 처리하는 놈이 바로 루퍼입니다. 메인 쓰레드가 looper를 가지고 있으며 무한 루프를 돌며 큐의 내용을 처리합니다.
 
 
 

APIs.

 

static void prepare()
static void loop()
void quit()
 
 
Thread getThread()  // 루퍼와 연결된 쓰레드 구하기.
static Looper getMainLooper()  // 응용 프로그램의 주 루퍼 구하기
static Looper myLooper()  // 현재 thread의 looper를 구함. 모든 쓰레드가 looper를 가지는게 아니므로 null 이 리턴될수도 있다.

 
 

 

Looper 사용하는 sample code 좀 보여주세요.

 

Message msg = Message.obtain();
msg.what = 0;
mThread.mBackHandler.sendMessage(msg);
 
CalcThread mThread = new CalcThread(mHandler);
mThread.setDaemon(true);
mThread.start();
 
Handler mHandler = new Handler(){
   public void handleMessage(Message msg){
      switch(msg.what) {
      case 0:
         // To do
      }
   }
}
 
class CalcThread extends Thread{
   Handler mMainHandler;
   CalcThread(Handler handler){
         mMainHandler = handler;
   }
 
   public void run(){
      Looper.prepare();
      Looper.loop();
   }
 
   public Handler mBackHandler = new Handler(){
      public void handleMessage(Message msg){
         Message retmsg = Message.obtain();
         switch(msg.what){
         case 0:
            try{ Thread.sleep(100); } catch (InterruptedException e) { ; }
            retmsg.what = 0;
            retmsg.arg1 = msg.arg1 * msg.arg1;
            retmsg.obj = new Double(Math.sqrt((double)msg.arg1));
         }
         mMainHandler.sendMessage(retmsg);
      }
   }
}

 

로그인 없이 추천 가능합니다. 손가락 꾸욱~

반응형

댓글