博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android HandlerThread的用法
阅读量:6669 次
发布时间:2019-06-25

本文共 2476 字,大约阅读时间需要 8 分钟。

HandlerThread 继承自Thread,内部封装了Looper。

首先Handler和HandlerThread的主要区别是:Handler与Activity在同一个线程中,HandlerThread与Activity不在同一个线程,而是别外新的线程中(Handler中不能做耗时的操作)。

用法:

import android.app.Activity;  import android.os.Bundle;  import android.os.Handler;  import android.os.Handler.Callback;  import android.os.HandlerThread;  import android.os.Message;      public class MainActivity extends Activity {      HandlerThread handlerThread = new HandlerThread("test");      Handler handler;            @Override      protected void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.activity_main);          System.out.println("cur_id="+Thread.currentThread().getId());                    handlerThread.start();          System.out.println("handlerThread.id=" + handlerThread.getId());          //post(runnable),只是直接运行了run(),run()内ThreadId与UIThread是一样的  //      handler = new Handler();           //post(runnable),将runnable运行在handlerThread中,这是非UIThread的          handler = new Handler(handlerThread.getLooper(), new Callback() {                            @Override              public boolean handleMessage(Message msg) {                  System.out.println("receive message.whatA=" + msg.what);                  if (msg.what == 1) {                      return true;//不再向外层传递                  } else {                      return false; //外层的handleMessage() 继续执行                  }                                }          }) {              @Override              public void handleMessage(Message msg) {                  // TODO Auto-generated method stub                  super.handleMessage(msg);                  System.out.println("receive message.whatB=" + msg.what);              }          };          handler.post(new Runnable() {                            @Override              public void run() {                  System.out.println("handler_post_cur_id="+Thread.currentThread().getId());                  handler.sendEmptyMessage(1);                  handler.sendEmptyMessage(2);              }          });                }    }

运行结果:

01-23 07:12:31.590: I/System.out(12386): cur_id=1  01-23 07:12:31.590: I/System.out(12386): handlerThread.id=1866  01-23 07:12:31.590: I/System.out(12386): handler_post_cur_id=1866  01-23 07:12:31.600: I/System.out(12386): receive message.whatA=1  01-23 07:12:31.600: I/System.out(12386): receive message.whatA=2  01-23 07:12:31.600: I/System.out(12386): receive message.whatB=2

 

转载地址:http://nnlxo.baihongyu.com/

你可能感兴趣的文章
CEPH安装(CentOS 7)
查看>>
ng build --aot --prod生成文件报错
查看>>
GD库知识点
查看>>
P2x与P3x的区别
查看>>
FZU 2158 数字密码
查看>>
用latex画化学结构式
查看>>
第一阶段冲刺06
查看>>
租车升级系统
查看>>
capistrano3.4.0部署不能自动登录
查看>>
二路归并排序
查看>>
【转】Python zip() 函数
查看>>
一个服务器的Apache2.4.6配置多个域名
查看>>
选择器的使用(first-child和last-child选择器)
查看>>
正则表达式学习
查看>>
python零散知识点
查看>>
28. Implement strStr() - Easy
查看>>
CSDN中根据文章自动生成文章目录
查看>>
999!!!
查看>>
python open和file的区别
查看>>
django中间件
查看>>