上一篇博我们讲了我们的Handler的机制及使用,现在我们就来学习下我们的HandlerThread. 顾名思义,我们可以理解为一个封装了handler的thread,通过跟踪进去我们可以看到其实它本身就是一个Thread;
ok,我们看下它的用法。 public class MainActivity extends AppCompatActivity { private Handler mHandelr; private HandlerThread thread; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); thread = new HandlerThread("HT_thread"); thread.start(); //在子线程(handlerThread)中创建handler对象 mHandelr = new Handler(thread.getLooper()) { @Override public void handleMessage(Message msg) { super.handleMessage(msg); //这是运行在子线程中(handlerThread)的,可以执行耗时操作 switch (msg.what) { case 0: System.out.println(msg.arg1); break; case 1: System.out.println(msg.arg2); break; } } }; //主线程发送消息 Message mes = mHandelr.obtainMessage(); mes.what = 1; mes.arg2 = 55; mHandelr.sendMessage(mes); //子线程发送消息 new Thread(new Runnable() { @Override public void run() { Message message = mHandelr.obtainMessage(); message.what = 0; message.arg1 = 5; mHandelr.sendMessage(message); } }).start(); } @Override protected void onDestroy() { super.onDestroy(); thread.quit(); } }这样我们就在我们的主线程和子线程中都发送消息给我们的子线程中的MessageQueur,并不对出现Looper还未创建的问题,这就是handlerThread的好处。其实有没有这个类都无所谓的。
这样,我们就讲整个handler讲解完毕,感兴趣的可以跟踪下源码,更深的理解handler机制。