Handlerはスレッドメッセージ通信を実現する


AndroidではHandlerクラスは通常,異なるスレッド間通信の手段として,スレッドの反発も同期も実現できる.
2つのスレッド間の通信をどのように実現するかを簡単な例で説明する.
 
  import android.app.Activity;
import android.os.Bundle;
import android.os.Message;
import android.util.Log;
import android.os.Handler;
public class MyHandler extends Activity {
static final String TAG = "Handler";

static final int HANDLER_TEST = 1;
Handler h = new Handler(){
public void handleMessage (Message msg)
{
switch(msg.what)
{
case HANDLER_TEST:
Log.d(TAG, "The handler thread id = " + Thread.currentThread().getId() + " ");
break;
}
}
};





/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "The main thread id = " + Thread.currentThread().getId() + " ");
new myThread().start();
setContentView(R.layout.main)
//   activity    
}


class myThread extends Thread
{
//      ,  Handler.sendMessage(Message msg);            
public void run()
{
Message msg = new Message();
msg.what = HANDLER_TEST;
h.sendMessage(msg);
Log.d(TAG, "The worker thread id = " + Thread.currentThread().getId() + " ");
}
}
}

 
同期と反発は、サブスレッドとメインスレッド間の通信によって実現される.