HandlerThread 继承自Thread,内部封装了Looper。
首先Handler和HandlerThread的主要区别是:Handler与Activity在同一个线程中,HandlerThread与Activity不在同一个线程,而是别外新的线程中(Handler中不能做耗时的操作)。
用法:







1. import android.app.Activity;
2. import android.os.Bundle;
3. import android.os.Handler;
4. import android.os.Handler.Callback;
5. import android.os.HandlerThread;
6. import android.os.Message;
7.
8.
9. public class MainActivity extends Activity {
10. new HandlerThread("test");
11. Handler handler;
12.
13. @Override
14. protected void onCreate(Bundle savedInstanceState) {
15. super.onCreate(savedInstanceState);
16. setContentView(R.layout.activity_main);
17. "cur_id="+Thread.currentThread().getId());
18.
19. handlerThread.start();
20. "handlerThread.id=" + handlerThread.getId());
21. //post(runnable),只是直接运行了run(),run()内ThreadId与UIThread是一样的
22. // handler = new Handler();
23. //post(runnable),将runnable运行在handlerThread中,这是非UIThread的
24. new Handler(handlerThread.getLooper(), new Callback() {
25.
26. @Override
27. public boolean handleMessage(Message msg) {
28. "receive message.whatA=" + msg.what);
29. if (msg.what == 1) {
30. return true;//不再向外层传递
31. else {
32. return false; //外层的handleMessage() 继续执行
33. }
34.
35. }
36. }) {
37. @Override
38. public void handleMessage(Message msg) {
39. // TODO Auto-generated method stub
40. super.handleMessage(msg);
41. "receive message.whatB=" + msg.what);
42. }
43. };
44. new Runnable() {
45.
46. @Override
47. public void run() {
48. "handler_post_cur_id="+Thread.currentThread().getId());
49. 1);
50. 2);
51. }
52. });
53.
54. }
55.
56. }

运行结果:






1. 01-23 07:12:31.590: I/System.out(12386): cur_id=1
2. 01-23 07:12:31.590: I/System.out(12386): handlerThread.id=1866
3. 01-23 07:12:31.590: I/System.out(12386): handler_post_cur_id=1866
4. 01-23 07:12:31.600: I/System.out(12386): receive message.whatA=1
5. 01-23 07:12:31.600: I/System.out(12386): receive message.whatA=2
6. 01-23 07:12:31.600: I/System.out(12386): receive message.whatB=2