android中HandlerThread继承了Thread,它是一种可以使用Handler的Thread,它的实现原理就是在run方法的内部用Looper.prepare()创建消息队列,然后通过Looper.loop()开启消息循环,这样的话我们就能用在HandlerThread中创建Handler来处理消息了,下面请看HandlerThread源代码中的run方法的实现:
public void run() {
mTid = Process.myTid();
Looper.prepare();
synchronized (this) {
mLooper = Looper.myLooper();
notifyAll();
}
Process.setThreadPriority(mPriority);
onLooperPrepared();
Looper.loop();
mTid = -1;
}
从HandlerThread的run方法实现来看,它与Thread有很大的不同,普通的Thread它的run方法内部主要是执行一个耗时的操作,而HandlerThread主要是创建消息队列,然后用Handler消息处理机制来执行一个耗时的操作。
上述就是HandlerThread的实现原理。。。。接下来我们来看看怎样在平时的项目中使用HandlerThread,,直接上代码:
package com.example.textdemo;
import java.util.UUID;
import android.support.v7.app.ActionBarActivity;
import android.text.format.Time;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
import android.os.Message;
import android.os.SystemClock;
public class MainActivity extends ActionBarActivity {
private MyHandler handler;
public Handler mUIHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
HandlerThread thread = new HandlerThread("");
thread.start();
handler=new MyHandler(thread.getLooper());
//发送一个消息处理耗时
handler.sendEmptyMessage(0);
}
private class MyHandler extends Handler {
public MyHandler(Looper lo) {
super(lo);
}
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
switch (msg.what) {
case 0:
//模拟一个耗时任务
SystemClock.sleep(3000);
//处理完后可以用mUIHandler发送消息到UI线程更新UI
mUIHandler.sendEmptyMessage(1);
break;
default:
break;
}
}
}
}
HandlerThread原理和用法分析到这里,哈哈,本人才疏学浅,如若有错误的地方,欢迎指教!