如何在子线程中创建Handler?
2015-12-24 17:57
405 查看
也许大家创建Handler都不陌生,但是如果要在子线程创建Handler,大家未必都能正确,在子线程中创建handler,要确保子线程有Looper,UI线程默认包含Looper我们需要用到一个特殊类
HandlerThread
这个类可以轻松的创建子线程handler
创建步骤:
1: 创建一个HandlerThread,即创建一个包含Looper的线程
HandlerThread的构造函数有两个
public HandlerThread(String name) {super(name);mPriority = Process.THREAD_PRIORITY_DEFAULT;}/*** Constructs a HandlerThread.* @param name* @param priority The priority to run the thread at. The value supplied must be from* {@link android.os.Process} and not from java.lang.Thread.*/public HandlerThread(String name, int priority) {super(name);mPriority = priority;}[/code]
这里我们使用第一个就好:
HandlerThread handlerThread=new HandlerThread("xuan");
handlerThread.start();//创建HandlerThread后一定要记得start();
通过HandlerThread的getLooper方法可以获取Looper
Looper looper=handlerThread.getLooper();
通过Looper我们就可以创建子线程的handler了
Handlr handler=new Handler(looper);
通过该handler发送消息,就会在子线程执行;
提示:如果要handlerThread停止:handlerThread.quit();
完整测试代码:
HandlerThread hanlerThread = new HandlerThread("子线程");hanlerThread.start();final Handler handler = new Handler(hanlerThread.getLooper()) {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);Log.d("----->", "线程:" + Thread.currentThread().getName());}};findViewById(R.id.bt).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {handler.sendEmptyMessage(100);}});结果:[/code]
12-24 10:13:15.881 5024-5052/gitosctest.gitosc_studyproject D/----->: 线程:子线程
相关文章推荐
- 去 IOE,MySQL 完胜 PostgreSQL
- Mybatis3源码分析(18)-插件(plugins)拦截器
- System.in.read()在Linux无法阻塞的问题
- android内部空间写文档
- Java WebService 简单实例
- IntelliJ IDEA15在线激活服务器地址
- Android 毛玻璃效果弹出菜单动画
- 用wamp打开进入localhost,但是无法打开localhost中的文件夹
- Centos6.5中 一键安装LNMP 安装Yii2.0 手工配置
- Mysql语句
- eclipse修改SVN账号密码
- iOS 绘图机制简介,Quartz 2D绘图用CGContextRef绘制音频波形图 —— HERO博客
- C#面向对象基础类与方法
- android偏门知识小节
- iOS学习之KVO的使用
- 【cocos2d-x】之添加虚拟摇杆
- 二叉树的建树、遍历(先序、中序、后序、层次)(递归和非递归)--Java实现
- adb 命令记录(笔记而已,绕道)
- js-d3画图插件
- JS封装cookie操作函数实例(设置、读取、删除)