SW 배움터/안드로이드

안드로이드4: 스레드 II

kusson 2017. 4. 19. 18:52
반응형
728x170

스레드 II : (스레드에서 UI)를 조작하는 방법

 

 스레드에는 메인 스레드와 작업스레드 두가지 종류가 있다. 사용자 인터페이스 위젯에게 이벤트를 전달하거나 화면을 그리는 작업을 담당하는 것을 메인 스레드라고 하는데 보통 UI(User Interface)라고 하고 시간이 많이 걸리거나 즉각적으로 결과가 나오지 않는 일반적인 스레드를

배경스레드 또는 작업스레드라고 한다. 스레드I에서 설명했듯이 스레드를 조작할 때 주의할 점은 1) UI 스레드는 블럭(멈춤) 시키면 안된다. 2) UI 스레드가 아닌 다른 스레드가 UI 툴킷을 조작하면 안된다는 것이다. 따라서 작업스레드에서 UI를 조작하는 방법이 문제가 된다. 이를 해결하기 위해서 사용하는 방법이 핸들러 클래스를 사용하는 방법(메시지 객체 전송)과 핸들러 클래스를 러너블 객체전송방식으로 사용하는 방법 그리고 AsyncTask 클래스를 상속받아서 사용하는 방법이다. 이를 구체적으로 살펴본다. 

 

 

 

1. Handler 클래스를 사용하는 방법(메시지 객체 전송 방식)

class TestThread extends Thread{

   Handler handler;

 

  TestThread(Handler handler){

    this.handler = handler;                 //내 스레드의 핸들러 객체를 저장해 놓는다.

     ..................

   }

 

public class ThreadTest extends Activity {

 .......................

JjThread handler;

 

public void onCreat(Bundle savedInstanceState) {

 .......................

   handler = new JjThread( ) ;

}

 

public void onState( ) {

 ........................

   Thread thread = new Thread(new Runnable( ) {       //무명 클래스

    

  public void run( ) {

      ..............

      Message msg = handler.obtainMessage( );          //내 스레드로 메시지를 전송한다.

      handler.sendMessage(msg);

      ................

     }

   });

...............

thread.start( );                                                     //스레드 실행

}

 

public class JjThread extends Handler {

   public void handleMessage(Message msg) {

   ...............

    }

  }

 }

}

 

 

2. Runnable 객체 전송 방식

 

 public class ThreadRunnableTest extends Activity {

  ................

    Handler handler;

    JjRunnableThread runnable;

 

 public void onCreat(Bundle saveInstanceState) {

  ...............

   handler = new Handler( );

   runnable = new JjRunnableThread( );

 }

 

 public void onStart( ){

 ...............

  Thread thread1 = new Thread(new Runnable ( ) {      //무명 클래스

    public void run( ){

    ..............

      handler.post(runnable);                        //UI를 업데이트하는 러너블 객체를 전송한다.

      ...................

     }

   });

  .............

 thread1.start( );

}

 

 public class JjRunnableThread implements Runnable{

   public void run( ){

   ............

   }

  }

}

 

※) 스레드I 참조할 것

 

반응형
그리드형