您的位置:首页 > 移动开发 > Android开发

android中HandlerThread的原理和用法讲解

2016-04-18 17:21 405 查看
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原理和用法分析到这里,哈哈,本人才疏学浅,如若有错误的地方,欢迎指教!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: