HandlerThread 继承自Thread,内部封装了Looper。
首先Handler和HandlerThread的主要区别是:Handler与Activity在同一个线程中,HandlerThread与Activity不在同一个线程,而是别外新的线程中(Handler中不能做耗时的操作)。
用法:
-
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;
-
-
-
public class MainActivity extends Activity {
-
HandlerThread handlerThread = new HandlerThread("test");
-
Handler handler;
-
-
@Override
-
protected void onCreate(Bundle savedInstanceState) {
-
super.onCreate(savedInstanceState);
-
setContentView(R.layout.activity_main);
-
System.out.println("cur_id="+Thread.currentThread().getId());
-
-
handlerThread.start();
-
System.out.println("handlerThread.id=" + handlerThread.getId());
-
-
-
-
handler = new Handler(handlerThread.getLooper(), new Callback() {
-
-
@Override
-
public boolean handleMessage(Message msg) {
-
System.out.println("receive message.whatA=" + msg.what);
-
if (msg.what == 1) {
-
return true;
-
} else {
-
return false;
-
}
-
-
}
-
}) {
-
@Override
-
public void handleMessage(Message msg) {
-
-
super.handleMessage(msg);
-
System.out.println("receive message.whatB=" + msg.what);
-
}
-
};
-
handler.post(new Runnable() {
-
-
@Override
-
public void run() {
-
System.out.println("handler_post_cur_id="+Thread.currentThread().getId());
-
handler.sendEmptyMessage(1);
-
handler.sendEmptyMessage(2);
-
}
-
});
-
-
}
-
-
}
运行结果:
-
01-23 07:12:31.590: I/System.out(12386): cur_id=1
-
01-23 07:12:31.590: I/System.out(12386): handlerThread.id=1866
-
01-23 07:12:31.590: I/System.out(12386): handler_post_cur_id=1866
-
01-23 07:12:31.600: I/System.out(12386): receive message.whatA=1
-
01-23 07:12:31.600: I/System.out(12386): receive message.whatA=2
-
01-23 07:12:31.600: I/System.out(12386): receive message.whatB=2
Android HandlerThread的用法
原文:http://blog.csdn.net/shineflowers/article/details/41677891