HandlerThread 用法
HandlerThread最大的优势在于引入MessageQueue概念,可以进行多任务队列管理。
HandlerThread背后只有一个线程,所以任务是串行依次执行的。串行相对于并行来说更安全,各任务之间不会存在多线程安全问题。
HandlerThread所产生的线程会一直存活,Looper会在该线程中持续的检查MessageQueue,并开启消息处理的循环。这一点和Thread(),AsyncTask都不同,thread实例的重用可以避免线程相关的对象的频繁重建和销毁。 getLooper().quit();来退出这个线程,其实原理很简单,就是改变在消息循环里面标志位,退出整个while循环,使线程执行完毕。
部分 测试代码如下:
public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- tv_name = (TextView) findViewById(R.id.tv_name);
- btn_name = (Button) findViewById(R.id.btn_name);
- Log.i(TAG, "==================main thread:" + Thread.currentThread().getName());
- final HandlerThread mHandlerThread = new HandlerThread("handlerThread");
- mHandlerThread.start();
- // Handler的handlerMessage方法在主线程执行还是在子线程执行,取决于创建Handler时传递给Handler的looper
- final MyHandler mHanlder = new MyHandler(mHandlerThread.getLooper());
- btn_name.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- mHanlder.sendEmptyMessage(1);
- try {
- Thread.sleep(3000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- mHandlerThread.getLooper().quit();
- }
- });
- }
- class MyHandler extends Handler {
- public MyHandler(Looper looper) {
- super(looper);
- }
- @Override
- public void handleMessage(Message msg) {
- Log.i(TAG, "==================" + Thread.currentThread().getName());
- // 输出内容为: ==============handlerThread
- //tv_name.setText("hello, this is the first message from handler");
- super.handleMessage(msg);
- }
- }
不过要注意:要想更新界面内容,还是需要使用主线程的Looper,不然的话还是会抛错误。
HandlerThread 用法的更多相关文章
- ThreadLocal, HandlerThread, IntentService
1. ThreadLocal用法详解和原理https://www.cnblogs.com/coshaho/p/5127135.html // ThreadLocal methods: public T ...
- 201709013工作日记--Android消息机制HandlerThread
1.首先来看一个常规的handler用法: 在主线程中建立一个handler: private Handler mHandler = new Handler() { @Override public ...
- Android HandlerThread 详解
概述 HandlerThread 相信大家都比较熟悉了,从名字上看是一个带有 Handler 消息循环机制的一个线程,比一般的线程多了消息循环的机制,可以说是Handler + Thread 的结合, ...
- 2018-03-17 handler学习使用
1.handler具体使用https://www.cnblogs.com/JohnTsai/p/5259869.html 2.handlerThread用法https://www.jianshu.co ...
- Android HandlerThread的用法
HandlerThread 继承自Thread,内部封装了Looper. 首先Handler和HandlerThread的主要区别是:Handler与Activity在同一个线程中,HandlerTh ...
- android点滴之HandlerThread的用法
转载请注明出处:http://blog.csdn.net/lskshz/article/details/25364909 一.介绍 HandlerThread继承自Thread,当线程开启时,也就是它 ...
- Handler的另外一种用法(HandlerThread)
直接上代码: public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Handler ...
- Android HandlerThread 总结使用
转载请标明出处:http://www.cnblogs.com/zhaoyanjun/p/6062880.html 本文出自[赵彦军的博客] 前言 以前我在 [Android Handler.Loop ...
- 转载 Android 多线程处理之多线程用法大集合
handler.post(r)其实这样并不会新起线程,只是执行的runnable里的run()方法,却没有执行start()方法,所以runnable走的还是UI线程. 1.如果像这样,是可以操作ui ...
随机推荐
- js定时相关函数:
定时相关函数: mytime= setTimeout(vCode, iMilliSeconds [, sLanguage]) -- 单次定时执行指定函数 clearTimeout(iTimeoutID ...
- div+css定位position详解
div+css定位position详解 1.div+css中的定位position 最主要的两个属性:属性 absolute(绝对定位) relative(相对定位),有他们才造就了div+css布局 ...
- <构建之法>第十三章到十七章有感以及这个项目读后感
<构建之法>第十三章到十七章有感 第13章:软件测试方法有哪些? 主要讲了软件测试方法:要说有什么问题就是哪种效率最高? 第14章:质量保障 软件的质量指标是什么?怎么样能够提升软件的质量 ...
- BZOJ3631[JLOI2014]松鼠的新家 题解
题目大意: 给你一棵树,要从编号为a[1]的节点走到编号为a[2]的节点再走到编号为a[3]的节点……一直走到编号为a[n]的节点.问每个节点最少访问多少次. 思路: 将其进行轻重链剖分,则从a[i] ...
- ACM zb的生日
zb的生日 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 今天是阴历七月初五,acm队员zb的生日.zb正在和C小加.never在武汉集训.他想给这两位兄弟买点什么 ...
- ACM 对决
对决 时间限制:1000 ms | 内存限制:65535 KB 难度:0 描述 Topcoder要招进来了 n 个新同学,Yougth计划把这个n个同学分成两组,要求每组中每个人必须跟另一组中 ...
- js中继承的几种用法总结(apply,call,prototype)
一,js中对象继承 js中有三种继承方式 1.js原型(prototype)实现继承 <SPAN style="BACKGROUND-COLOR: #ffffff">& ...
- 《深入理解Windows Phone 8.1 UI控件编程》基于最新的Runtime框架
<深入理解Windows Phone 8.1 UI控件编程>本书基于最新的Windows Phone 8.1 Runtime SDK编写,全面深入地论述了最酷的UI编程技术:实现复杂炫酷的 ...
- 【BZOJ】2333: [SCOI2011]棘手的操作
http://www.lydsy.com/JudgeOnline/problem.php?id=2333 题意: 有N个节点,标号从1到N,这N个节点一开始相互不连通.第i个节点的初始权值为a[i], ...
- 【BZOJ】3670: [Noi2014]动物园
http://www.lydsy.com/JudgeOnline/problem.php?id=3670 题意:太水了= = #include <bits/stdc++.h> using ...