HandlerThreadスレッド開始handler

1922 ワード

import android.app.Activity;

import android.os.Bundle;

import android.os.Handler;

import android.os.HandlerThread;

import android.os.Looper;

import android.os.Message;



public class MainActivity extends Activity{





	/** Called when the activity is first created. */

	@Override

	public void onCreate(Bundle savedInstanceState) {

		super.onCreate(savedInstanceState);

		//  UI 

		System.out.println("onCreate  CurrentThread = "

				+ Thread.currentThread().getName());



		setContentView(R.layout.activity_main);



		//  Looper 

		HandlerThread handler = new HandlerThread("handler_Thread");

		handler.start();

		MyHandler myHandler = new MyHandler(handler.getLooper());

		Message msg = myHandler.obtainMessage();

		msg.obj = "abc";

		Bundle data = new Bundle();

		data.putString("title", " ");

		data.putString("info", " ");

		msg.setData(data);

		//  msg , msg Handler 

		msg.sendToTarget();



	}



	class MyHandler extends Handler {

		public MyHandler() {



		}



		public MyHandler(Looper looper) {

			super(looper);

		}



		@Override

		public void handleMessage(Message msg) {

			// TODO Auto-generated method stub

			String s = (String) msg.obj;

			Bundle data = msg.getData();

			String title=data.getString("title");

			String info=data.getString("info");   

            System.out.println("title is " + title + ", info is" + info);  

            System.out.println("msg.obj is " + s);  

			System.out.println(Thread.currentThread().getId());

			System.out.println("handlerMessage");

		}



	}

}


HandlerThreadはThreadを継承するので、それ自体がスレッドです.彼はLooperオブジェクトを含むスレッドクラスを作成することに似ていますが、LooperはHandlerクラスを作成するために使用することができます.これにより、自分でLooperオブジェクトをインスタンス化する必要がなく、preareとLoopを呼び出すのではなく、HandlerThreadを直接呼び出すことができます.通常のThreadよりもLooperオブジェクトが多くなります.