我是靠谱客的博主 辛勤鼠标,这篇文章主要介绍HandleThread的分析一、HandleThread的分析二、ThreadHandle简单Demo,现在分享给大家,希望可以做个参考。

一、HandleThread的分析

从名称就可以看出,HandleThread是Handle和Thread的‘结合’,但它本质上还是个Thread。


public class HandlerThread extends Thread

既然它是一个线程, 那么我们就看看它的run方法


@Override
public void run() {
mTid = Process.myTid();
Looper.prepare();
synchronized (this) {
mLooper = Looper.myLooper();
notifyAll();
}
Process.setThreadPriority(mPriority);
onLooperPrepared();
Looper.loop();
mTid = -1;
}

从源码可以看出,它首先调用Looper的prepare()方法来准备,接着调用
Looper.myLooper()方法来取出当前线程的Looper,最后又调用loop()方法循环。由此可以看出HandleThread和普通Thread的区别是HandleThread在内部创建了消息队列。

二、ThreadHandle简单Demo


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="点我" />
</RelativeLayout>

布局如上


private HandlerThread handlerThread = new HandlerThread("com.lw.handlethread"){
public void run() {
super.run() ;
System.out.println("xixixixi");
};
};

创建HandleThread对象


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
handlerThread.start() ;
new Thread(){
public void run() {
System.out.println("new Thread---" + Thread.currentThread().getName());
//将handler和HandlerThread绑定起来
handler = new Handler(handlerThread.getLooper()){
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case RESEIVE:
System.out.println("当前线程:" + Thread.currentThread().getName());
break;
default:
break;
}
}
}; ;
};
}.start();
findViewById(R.id.btn).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
handler.sendEmptyMessage(RESEIVE);
}
});
}

注意:首先调用handleThread.start(),让其调用run方法,初始化Looper,否则下面代码会报错,接着在子线程中创建Handle,并且调用handleThread的getLooper()方法。



findViewById(R.id.btn).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
handler.sendEmptyMessage(RESEIVE);
}
});

为按钮添加点击事件,并发送消息.

程序输出结果如下:


07-30 23:07:32.168: I/System.out(2748): new Thread---Thread-124
07-30 23:07:42.512: I/System.out(2748): 当前线程:com.lw.handlethread

由上可知,Hanlde和HandleThread绑定到了一起。

注意:这个Demo本身没什么价值,只是简单描述了下HandleThread的作用。

最后

以上就是辛勤鼠标最近收集整理的关于HandleThread的分析一、HandleThread的分析二、ThreadHandle简单Demo的全部内容,更多相关HandleThread内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(109)

评论列表共有 0 条评论

立即
投稿
返回
顶部