HandlerThread最大的优势在于引入MessageQueue概念,可以进行多任务队列管理。

  HandlerThread背后只有一个线程,所以任务是串行依次执行的。串行相对于并行来说更安全,各任务之间不会存在多线程安全问题。

  HandlerThread所产生的线程会一直存活,Looper会在该线程中持续的检查MessageQueue,并开启消息处理的循环。这一点和Thread(),AsyncTask都不同,thread实例的重用可以避免线程相关的对象的频繁重建和销毁。 getLooper().quit();来退出这个线程,其实原理很简单,就是改变在消息循环里面标志位,退出整个while循环,使线程执行完毕。

部分 测试代码如下:

public void onCreate(Bundle savedInstanceState) {

  1. super.onCreate(savedInstanceState);
  2. setContentView(R.layout.main);
  3. tv_name = (TextView) findViewById(R.id.tv_name);
  4. btn_name = (Button) findViewById(R.id.btn_name);
  5. Log.i(TAG, "==================main thread:" + Thread.currentThread().getName());
  6. final HandlerThread mHandlerThread = new HandlerThread("handlerThread");
  7. mHandlerThread.start();
  8. // Handler的handlerMessage方法在主线程执行还是在子线程执行,取决于创建Handler时传递给Handler的looper
  9. final MyHandler mHanlder = new MyHandler(mHandlerThread.getLooper());
  10. btn_name.setOnClickListener(new OnClickListener() {
  11. @Override
  12. public void onClick(View v) {
  13. mHanlder.sendEmptyMessage(1);
  14. try {
  15. Thread.sleep(3000);
  16. } catch (InterruptedException e) {
  17. e.printStackTrace();
  18. }
  19. mHandlerThread.getLooper().quit();
  20. }
  21. });
  22. }
  23. class MyHandler extends Handler {
  24. public MyHandler(Looper looper) {
  25. super(looper);
  26. }
  27. @Override
  28. public void handleMessage(Message msg) {
  29. Log.i(TAG, "==================" + Thread.currentThread().getName());
  30. // 输出内容为: ==============handlerThread
  31. //tv_name.setText("hello, this is the first message from handler");
  32. super.handleMessage(msg);
  33. }
  34. }

不过要注意:要想更新界面内容,还是需要使用主线程的Looper,不然的话还是会抛错误。

HandlerThread 用法的更多相关文章

  1. ThreadLocal, HandlerThread, IntentService

    1. ThreadLocal用法详解和原理https://www.cnblogs.com/coshaho/p/5127135.html // ThreadLocal methods: public T ...

  2. 201709013工作日记--Android消息机制HandlerThread

    1.首先来看一个常规的handler用法: 在主线程中建立一个handler: private Handler mHandler = new Handler() { @Override public ...

  3. Android HandlerThread 详解

    概述 HandlerThread 相信大家都比较熟悉了,从名字上看是一个带有 Handler 消息循环机制的一个线程,比一般的线程多了消息循环的机制,可以说是Handler + Thread 的结合, ...

  4. 2018-03-17 handler学习使用

    1.handler具体使用https://www.cnblogs.com/JohnTsai/p/5259869.html 2.handlerThread用法https://www.jianshu.co ...

  5. Android HandlerThread的用法

    HandlerThread 继承自Thread,内部封装了Looper. 首先Handler和HandlerThread的主要区别是:Handler与Activity在同一个线程中,HandlerTh ...

  6. android点滴之HandlerThread的用法

    转载请注明出处:http://blog.csdn.net/lskshz/article/details/25364909 一.介绍 HandlerThread继承自Thread,当线程开启时,也就是它 ...

  7. Handler的另外一种用法(HandlerThread)

    直接上代码: public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Handler ...

  8. Android HandlerThread 总结使用

    转载请标明出处:http://www.cnblogs.com/zhaoyanjun/p/6062880.html 本文出自[赵彦军的博客] 前言 以前我在 [Android Handler.Loop ...

  9. 转载 Android 多线程处理之多线程用法大集合

    handler.post(r)其实这样并不会新起线程,只是执行的runnable里的run()方法,却没有执行start()方法,所以runnable走的还是UI线程. 1.如果像这样,是可以操作ui ...

随机推荐

  1. JDBC连接各种数据库的字符串,就是不好记

    JDBC连接各种数据库的字符串大同小异,在此总结一下,备忘. oracle    driverClass:oracle.jdbc.driver.OracleDriver    url:jdbc:ora ...

  2. 20145308刘昊阳 《Java程序设计》第7周学习总结

    20145308刘昊阳 <Java程序设计>第7周学习总结 教材学习内容总结 第13章 时间与日期 13.1 认识时间与日期 13.1.1 时间的度量 格林威治时间(GMT) 世界时(UT ...

  3. BZOJ 1015 题解

    1015: [JSOI2008]星球大战starwar Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝 ...

  4. JavaScript进阶(三)之对象

    返回星期方法 getDay() 返回星期,返回的是0-6的数字,0 表示星期天.如果要返回相对应“星期”,通过数组完成,代码如下: <script type="text/javascr ...

  5. js-小效果-无缝滚动

    <!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...

  6. CF #374 (Div. 2) C. Journey dp

    1.CF #374 (Div. 2)    C.  Journey 2.总结:好题,这一道题,WA,MLE,TLE,RE,各种姿势都来了一遍.. 3.题意:有向无环图,找出第1个点到第n个点的一条路径 ...

  7. SVN文本文件报二进制属性的问题

    2011-11-21 00:42 svn总出现二进制相关的烦人事 在使用svn add 时提示: A  (bin)  templates/translate/screen/selectTransLan ...

  8. Linux下mongodb的安装及启动

    安装 1>设置mongoDB目录 cd /home/apps 附:centOS下创建目录命令  mkdir /home/apps 2>下载mongodb curl -O http://fa ...

  9. navicat远程连接mysql

      转载:http://blog.sina.com.cn/s/blog_84485e540101178p.html   ERROR 1130: Host '192.168.1.81' is not a ...

  10. 导出查询结果到excle

    实现功能 输入查询结果 点击导出查询结果 导出到excle表.