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 를 통해 보내는 방식으로 사용하면 된다.
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