Handler 를 new 하게 되면 현재 new 를 실행한 thread 에 bind 되게 된다. 그래서 이 Handler 는 현재 thread 의 message queue 를 이용하게 되고, Handler 의 method 인 post() 나 sendMessage() 를 이용하면, 현재의 message queue 에 Runnable 또는 Message 가 들어가게 된다.
이렇게 message queue 에 저장된 녀석이 하나씩 처리되는데, 이때 다시 handler 가 Message() 는 handleMessage() 를 통해서 처리하고, Runnable 같은 것들은 정해진 command(run() 같은) 를 호출해서 처리하게 된다.
andorid 에서는 UI thread 에서 화면이 처리되는데, 이 UI thread 와 동시에 다른 thread 를 사용해야 할 일이 많이 생긴다. 이 때 가장 손쉬운 방법은 현재의 thread(UI thread) 에서 new Handler() 를 해 놓고, 새롭게 만든 thread 에서 특정작업을 하고, UI thread 에 반영될 녀석을 Handler 를 통해 보내는 방식으로 사용하면 된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | package arabiannight.tistory.com.handlersimple; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.widget.TextView; public class MainActivity extends Activity { private TextView tv_Content; private Handler mHandler; @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); mHandler = new Handler(); tv_Content = (TextView) findViewById(R.id.tv_content); mHandler.post(mRunnable); // Runnable 객체 실행 mHandler.postAtFrontOfQueue(mRunnable); // Runnable 객체를 Queue 맨앞에 할당 mHandler.postDelayed(mRunnable, 1000 ); // Runnable 객체를 1초 뒤에 실행 new Handler().post(mRunnable); // 익명 객체로 실행 new Handler().postAtFrontOfQueue(mRunnable); new Handler().postDelayed(mRunnable, 1000 ); new Handler().post( new Runnable() { // new Handler and Runnable @Override public void run() { tv_Content.setText( "런어블1" ); } }); } private Runnable mRunnable = new Runnable() { @Override public void run() { tv_Content.setText( "런어블1" ); } }; } // class end |
Designed by sketchbooks.co.kr / sketchbook5 board skin
Sketchbook5, 스케치북5
Sketchbook5, 스케치북5
Sketchbook5, 스케치북5
Sketchbook5, 스케치북5