关于对HandlerThread的了解
在Android中经常需要创建一个循环线程,有耗时操作时候,放到里面去操作,如果没有耗时操作,就让该线程处于等待,但是不要杀死它,
最好不要一旦有耗时任务,就立刻创建一个新线程,因为会有性能问题。
HandlerThread的父类是Thread,内部会有一个looper循环:
首先看一下HandlerThread的构造方法:

注意:一个是默认优先级,一个是可以设置优先级
开始启动:

注意:上面的run方法就是为了调用Looper.prepare和Looper.loop来构建一个循环线程
getLooper()来获取当前HandlerThread线程的mLooper对象:

注意:在获取mLooper对象的时候有一个同步的问题,只有当线程创建成功,而且Looper对象也创建成功,才会获取到mLooper对象,
这里的wait()和run里面的notifyAll()共同完成同步问题 。
结束当前线程的循环:quit()
demo:
public class MainActivity extends AppCompatActivity {
private Button btn ;
private Handler mUIHandler;
private Handler mSubHandler;
private TextView textView;
private Handler.Callback mSubCallback = new Handler.Callback() {
//该接口的实现就是处理异步耗时任务的,因此该方法执行在子线程中
@Override
public boolean handleMessage(Message msg) {
switch (msg.what) {
case 0:
Message msg1 = new Message();
msg1.what = 0;
msg1.obj = java.lang.System.currentTimeMillis();
mUIHandler.sendMessage(msg1);
break;
default:
break;
}
return false;
}
};
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (Button) this.findViewById(R.id.button);
textView = (TextView) findViewById(R.id.textView);
HandlerThread workHandle = new HandlerThread("workHandleThread");
workHandle.start();
//在创建Handler作为HandlerThread线程消息执行者的时候必须调用start方法之后,
//因为创建Handler需要的Looper参数是从HandlerThread类中获得,
//而Looper对象的赋值又是在HandlerThread的run方法中创建。
mSubHandler = new Handler(workHandle.getLooper(), mSubCallback);
btn.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
//投放异步耗时任务到HandlerThread中
mSubHandler.sendEmptyMessage(0);
}
});
}
}
参考:http://blog.csdn.net/feiduclear_up/article/details/46840523
关于对HandlerThread的了解的更多相关文章
- Android HandlerThread 总结使用
转载请标明出处:http://www.cnblogs.com/zhaoyanjun/p/6062880.html 本文出自[赵彦军的博客] 前言 以前我在 [Android Handler.Loop ...
- HandlerThread 创建一个异步的后台线程
使用HandlerThread几大优点: 1.制作一个后台异步线程,需要的时候就可以丢一个任务给它,使用比较灵活; 2.Android系统提供的,使用简单方便,内部自己封装了Looper+Handle ...
- 关于HandlerThread的分析
Android中的Thread没有对java中的Thread做任何封装,而Android提供了一个遍历方法HandlerThread,他继承于Thread,实现了对遍历系统的一些封装,下面研究一下Ha ...
- Android HandlerThread 的使用及其Demo (转)
转自http://www.cnblogs.com/hnrainll/p/3597246.html 介绍 首先我们来看看为什么我们要使用HandlerThread?在我们的应用程序当中为了实现同时完成多 ...
- HandlerThread和IntentService
HandlerThread 为什么要使用HandlerThread? 我们经常使用的Handler来处理消息,其中使用Looper来对消息队列进行轮询,并且默认是发生在主线程中,这可能会引起UI线程的 ...
- HandlerThread源码分析
其实原本HandlerThread的分析不应该单独开一篇博客的,应该在讲消息机制的那一片中一起分析. 但当时忘记了,而且今天第一次用MarkDown写博客,有点上瘾,就再来一篇,权当滥竽充数过过手瘾. ...
- HandlerThread
一.概念 1.Android中Handler的使用,一般都在UI主线程中执行,因此在Handler接收消息后,处理消息时,不能做一些很耗时的操作,否则将出现ANR错误. 2.HandlerTh ...
- 【Android】用HandlerThread模拟AsyncTask功能(ThreadTask)
前言 AsyncTask是个好东西,能处理绝大多数应用线程和更新UI的任务,由于其内部使用了静态线程池,如果你有一堆异步任务(例如全局定时更新数据.同一个Activity中多个AsyncTask同时执 ...
- HandlerThread 用法
HandlerThread最大的优势在于引入MessageQueue概念,可以进行多任务队列管理. HandlerThread背后只有一个线程,所以任务是串行依次执行的.串行相对于并行来说更安全,各任 ...
- Android HandlerThread 的使用及其Demo
今天我们一起来学习下一个Android中比较简单的类HandlerThread,虽然它的初始化有点小麻烦. 介绍 首先我们来看看为什么我们要使用HandlerThread?在我们的应用程序当中为了实现 ...
随机推荐
- VS 文件自动定位功能
在Visual Studio 中,当你在所有打开的文件中进行切换时,在Solution Explorer中也会自定定位到这个文件的目录下面,这个功能用来查找当前文件是非常有用.在Tools->O ...
- 使用ServletConfig获得web.xml资源中的参数
适用:一些不需要再Servlet文件中初始化的可以使用,例如:数据库用户名和密码 //Servlet文件 //实例化ServletConfig对象 ServletConfig servletConf ...
- Jeffrey Richter's Power Threading Library
Jeffrey Richter's Power Threading Library The Power Threading Library consists of a number of classe ...
- Jenkins Slave 设置
Jenkins Slave node环境变量设置有很多trap,在最近的工作当中,我把slave部署在red hat linux 上,进行c++项目的编译部署和发布,但是在执行工程的时候,总会报出某些 ...
- HttpClient的使用-爬虫学习(一)
Apache真是伟大,为我们提供了HttpClient.jar,这个HttpClient是客户端的http通信实现库,这个类库的作用是接受和发送http报文,引进这个类库,我们对于http的操作会变得 ...
- Linux脚本学习随记
把文件件的归属转移到其他用户上chown [-R] 账号名称:用户组名称 文件或目录 在进行hadoop分布式部署的时候,需要生成密钥对具体的操作如下先在master的hadoop目录下创建.sshm ...
- [转]Disabling ASLR on individual iOS applications when using iOS 6.0.1
ASLR: Address Space Layout Randomization 查看应用是否进行了 ASLR 保护的方法:otool -hv ${File-Path} I recently enco ...
- 4月13号的web标准化交流化-开端
这是实习工作的开始,也是正式踏入北京之后去参加的第一个活动.也算是想着法的去融入这个圈子. 这两个分享都是基于nodejs的.nodejs从11年开始就开始红火.但是真正nodejs能用来干什么? 我 ...
- 框架的设计之IRepository还是IRepository<T>
[Yom框架]漫谈个人框架的设计之[是IRepository还是IRepository<T>]? 前言 ...
- java生成PDF文件(itext)
itextpdf-5.4.3.jar下载地址: http://www.kuaipan.cn/file/id_58980483773788178.htm 导入itextpdf-5.4.3.jar ToP ...