Android-HandlerThread
先看一个使用HandlerThread的例子:
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); HandlerThread thread = new HandlerThread("handler_thread");//1 创建一个HandlerThread thread.start(); final Handler handler = new Handler(thread.getLooper()) {//2 创建Handler的时候,使用HandlerThread的Looper @Override public void handleMessage(Message msg) { Log.i(TAG, msg.what+ ","+ Thread.currentThread().getName()); //4 在子线程中处理消息 super.handleMessage(msg); } }; new Thread(new Runnable() { @Override public void run() { for (int j = 0; j < 5; j++) { Message msg = Message.obtain(); msg.what = j; handler.sendMessage(msg); //3 向handler发送消息 try{Thread.sleep(1000);}catch(Exception e){} } } }).start(); }
可以看出来,ThreadHandler提供了一种在非主线程中利用handler和looper的方式。
我们看下ThreadHandler的源码:
public class HandlerThread extends Thread { //继承了Thread ...... Looper mLooper; //有一个Looper的成员变量 ...... @Override public void run() { mTid = Process.myTid(); Looper.prepare(); //在子线程中创建Looper synchronized (this) { mLooper = Looper.myLooper(); notifyAll(); //唤醒getLooper时等待的线程 } Process.setThreadPriority(mPriority); onLooperPrepared(); Looper.loop(); //开始消息循环 mTid = -1; } public Looper getLooper() { if (!isAlive()) { return null; } // If the thread has been started, wait until the looper has been created. synchronized (this) { while (isAlive() && mLooper == null) { //这里保证Looper已经初始化完成 try { wait(); } catch (InterruptedException e) { } } } return mLooper; } }
ThreadHandler继承了Thread,在里面会创建Looper,开启消息循环,发送消息,使用ThreadHandler的Looper的Handler可以在子线程中进行消息处理。很明显,这比我们自己实现一种异步任务处理机制要简单的多得多。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。