티스토리 뷰


p.630

쓰레드


안드로이드는 멀티 스레드 지원
  • 리눅스 : 멀티 스레드 운영체제
  • 자바 : 가상 머신 치원에서 멀티 스레드 지원
주로 자바에의해 지원


자바의 스레드 생성 방법 2가지
  • Thread()
  • Thread(Runnable runnable)
    • Runnable 인터페이스 구현 객체 생성 
    • Thread의 생성자로 전달 
    : 자바는 다중 상속을 지원하지 않기 때문에 위의 두가지 방법 제시 



스레드
  • 고유의 스택을 가지며 메인 스레드와는 별도로 CPU 시간을 할당받아 실행된다. 
  • run 메서드 : 스레드에서 할 작업 작성, 스레드의 진입점, 메인 메서드 
  • start 메서드 : 스레드 동작에 필요한 자원을 할당한 후 run 메서드를 호출하여 스레드를 기동시킨다. 
  • 자바의 스레드는 기본적으로 메인 스레드와 동등한 자격을 가지며 모든 스레드가 종료되어야 비로소 종료된다
  • 데몬스레드 : 메일 스레드가 종료될 때 강제 종료된다. 
    setDaemon (boolean on) 을 이용하여 설정한다.  


참고
DATA01>자바>Thread

핸들러


p.635
동기화 문제
백그라운드 스레드는 내부적인 연산만 해야 하며 다른 스레드 소속의 UI를 건드릴 수 없다. 

핸들러(Handler)
  • 스레드간에 메세지나 러너블 객체를 통해 메시지를 주고 받는 장치
  • 자신을 생성하는 스레드에 부착하여 그 스레드의 메시지 큐를 통해 다른 스레드와 통신 
  • 핸들러는 그 존재만 알고 있다면 어떤 스레드에서나 자유롭게 액세스 할 수 있다. 
  • 보통 다른 스레드로부터 전달되는 메시지를 수신하지만 자기 자신이 보낸 메시지도 받을 수 있다. 
  • public void handleMessage(Message msg) : 메시지가 도착하면 호출되는 메서드 
  • 메시지를 보내는 쪽이 사용하는 메서드
    • boolean Handler.sendEmptyMessage(int what)
    • boolean Handler.endMessage(Message msg)
    • boolean sendMessageAtFrontOfQueue(Message msg)
    • boolean post(Runnable r)

메시지(Message)
스레드간의 통신 내용을 저장하는 객체
메시지 재사용 : 안드로이드는 시스템에 메시지 풀을 두어 캐시를 유지한다. 
시스템의 메시지 풀에서 메시지 객체 가져오기
static Message obtain([Message orig])
static Message obtain(Handler h, int wat, int argq, int arg2, Object obj)
void recycle()


 


 



p.643

루퍼


메시지는 즉시 호출되는 메서드와는 달리 스레드간의 신호이므로 보낸다고 해서 바로 바로 처리되는 것은 아니다.

메시지 큐는 시스템이 알아서 관리 


루퍼(Looper)
  • android.os.Looper
  • 무한히 실행되는 메시지 루프를 통해 큐에 메시지가 들어오는지 감시하며 들어온 메시지를 처리할 핸들러를 찾아 handleMessage 메서드를 호출한다
  • 메인스레드는 기본적으로 루퍼를 가진다
  • 작업스레드는 기본적으로 루퍼가 없으므로 직접 생성하고 실행시켜야 메지시를 받을 수 있다.  

  class LooperThread extends Thread {
      
public Handler mHandler;
      
      
public void run() {
          
Looper.prepare();
          
          mHandler 
= new Handler() {
              
public void handleMessage(Message msg) {
                  
// process incoming messages here
              
}
          
};
          
          
Looper.loop();
      
}
  
}


댓글