以前研究過handler 和 looper 消息隊列,不過Android裏的handler不是另外開啓線程來執行的,仍是在主UI線程中,若是想另啓線程的話須要用到HandlerThread來實現。在使用HandlerThread的時候須要實現CallBack接口以重寫handlerMessage方法,在handlerMessage方法中來處理本身的邏輯。下來給出一個小例子程序。 layout文件很簡單,就一個按鈕來啓動HanlderTread線程 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <Button android:id="@+id/handlerThreadBtn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="startHandlerThread" /> </LinearLayout> Activity代碼以下: package com.tayue; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Handler.Callback; import android.os.HandlerThread; import android.os.Message; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; /** * * @author xionglei * */ public class TestHandlerActivity extends Activity implements OnClickListener{ public Button handlerThreadBTN; MyHandlerThread handlerThread; Handler handler; /** 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.main); handlerThreadBTN = (Button) findViewById(R.id.handlerThreadBtn); handlerThreadBTN.setOnClickListener(this); handlerThread = new MyHandlerThread("myHanler"); handlerThread.start(); //注意: 這裏必須用到handler的這個構造器,由於須要把callback傳進去,從而使本身的HandlerThread的handlerMessage來替換掉Handler原生的handlerThread handler = new Handler(handlerThread.getLooper(), handlerThread); } @Override public void onClick(View v) { //點擊按鈕後來開啓線程 handler.sendEmptyMessage(1); } private class MyHandlerThread extends HandlerThread implements Callback { public MyHandlerThread(String name) { super(name); } @Override public boolean handleMessage(Message msg) { //打印線程的名稱 System.out.println(" handleMessage CurrentThread = " + Thread.currentThread().getName()); return true; } } } 點擊按鈕,打印的日誌以下(這裏點擊了3次) 07-06 09:32:48.776: I/System.out(780): onCreate CurrentThread = main 07-06 09:32:55.076: I/System.out(780): handleMessage CurrentThread = myHanler 07-06 09:32:58.669: I/System.out(780): handleMessage CurrentThread = myHanler 07-06 09:33:03.476: I/System.out(780): handleMessage CurrentThread = myHanler HandlerThread就這麼簡單。 固然 android本身也有異步線程的handler,就是AsyncTask,這個類就是封裝了HandlerThread 和handler來實現異步多線程的操做的。