Android XHandler —极大方便UI线程和工作线程的切换
来源:互联网 发布:授权查询系统源码 编辑:程序博客网 时间:2024/05/23 20:20
一、XHandler 功能介绍
XHandler是对Android Handler进行的扩展,不仅支持在UI主线程中进行消息的发送处理,还支持了在工作线程中进行消息的发送处理,工作线程采用线程池实现。并且可以很方便的在UI主线程和工作线程之前进行切换。解放UI主线程的微耗时操作,减少Android ANR,让APP更加流畅。
二、XHandler 使用讲解
(1)XHandler初始化
- 目前提供2中构造方法:
- 一种默认无参构造器;
- 另一种是传入Context参数,XHandler内部采用弱引用的方式(推荐使用)。
//第一种:默认无参构造器private XHandler mXHandler = new XHandler();//第二种传入context,XHandler内部采用弱引用的方式,推荐使用该构造方法private XHandler mXHandler = new XHandler(this) { @Override public void handleMessage(Message msg) { super.handleMessage(msg); //该方法为处理UI主线程的消息 } @Override public void handleMessageOnWorker(Message msg) { super.handleMessageOnWorker(msg); //该方法为处理工作线程的消息 } };
(2)XHandler发送消息到工作线程
- (1)XHandler中提供向工作线程发送消息的一组方法,方法名以**OnWorker结尾。
- 例如: mXHandler.postOnWorker(runnable)
- mXHandler.sendMessageOnWorker(msg)
- mXHandler.sendEmptyMessageOnWorker(0) 等。
- (a)XHandler从工作线程 ——> UI主线程
//在工作线程中执行mXHandler.postOnWorker(new Runnable() { @Override public void run() { //工作线程中执行,不影响UI线程 //如果工作线程中的耗时任务完成,此时想切换到UI主线程,怎么办??? //依然通过mXHandler来发送消息到UI主线程。使用Hander的原始消息发送方法。 mXHandler.sendEmptyMessage(MSG_02); } });
- (b)XHandler 从UI主线程 ——> 工作线程
//在UI线程中执行mXHandler.post(new Runnable() { @Override public void run() { //从主线程切换到工作线程中 mXHandler.sendEmptyMessageOnWorker(MSG_02); } });
(3)、XHandler消息处理
(a)UI主线程消息处理方法——handleMessage(msg)
(b)工作线程消息处理方法——handleMessageOnWorker(msg)
- 示例代码如下:
private XHandler mXHandler = new XHandler(this) { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case MSG_01: Toast.makeText(MainActivity.this, "UI线程发送消息-toast", Toast.LENGTH_LONG).show(); break; case MSG_02: Toast.makeText(MainActivity.this, "工作线程切换到主线程的-toast", Toast.LENGTH_LONG).show(); break; } } @Override public void handleMessageOnWorker(Message msg) { super.handleMessageOnWorker(msg); switch (msg.what) { case MSG_01: Log.e(TAG, "handleMessageOnWorker: 工作线程发送消息"); break; case MSG_02: Log.e(TAG, "handleMessageOnWorker: UI线程post切换到工作线程"); break; } } };
三、XHandler 实现原理
通过Android API提供的HandlerThread类,该类也是一个Thread线程类,不同的是其中加入了Looper的实现,因此可以配合Handler进行使用。然后再handleMessage方法中,把消息传递过来的Runnable线程接口,交由线程池ExecutorService去执行。如果不用线程池ExecutorService,则消息由HandlerThread执行,如果频繁发送消息,则消息会依次顺序执行。
Github项目地址(欢迎Star) : XHandler
(XHandler目前处于开发阶段,还有许多尚未完善的地方,不喜勿喷)
阅读全文
0 0
- Android XHandler —极大方便UI线程和工作线程的切换
- UI线程和工作线程
- Android UI主线程和工作线程的总结
- windows下的UI线程和工作线程
- 使用MessageWindows类从工作线程切换到UI线程
- Android UI线程和非UI线程
- Android UI线程和非UI线程
- Android UI线程和非UI线程
- Android UI线程和非UI线程
- Android UI线程和非UI线程
- Android UI线程和非UI线程
- Android UI线程和非UI线程
- Android UI线程和非UI线程
- Android UI线程和非UI线程
- Android UI线程和非UI线程
- Android UI线程和非UI线程
- Android UI线程和非UI线程
- Android UI线程和非UI线程
- 获取字符串中的子串
- Java建造者(Builder)模式
- postgreSQL 去掉设置密码提示
- geometry-api-java 学习笔记(五)多边形 Polygons
- 初入python
- Android XHandler —极大方便UI线程和工作线程的切换
- ARM(s5pv210)裸板驱动之(系统时钟1)
- Redis安装(CentOS中)
- Git 使用(6)版本回退
- shiro笔记
- mysql left join,right join,inner join用法分析
- WPF 程序打包步骤
- win下jmeter运行NON GUI模式
- CSMA/CD