Handler注意事项
2024-08-27 18:56:36
一. Handler与Thread的区别。
Handler与调用者处于同一线程,如果Handler里面做耗时的动作,调用者线程会阻塞。Android UI操作不是线程安全的,并且这些操作必须在UI线程中执行。Android提供了几种基本的可以在其他线程中处理UI操作的方案,包括Activity的runOnUiThread(Runnable),View的post以及1.5版本的工具类AsyncTask等方案都采用了Handler,Handler的post对线程的处理也不是真正start一个新的线程,而是直接调用了线程的run方法,这正是google煞费苦心搞一套Handler的用意。
二. Handler对于Message的处理不是并发的。
一个Looper 只有处理完一条Message才会读取下一条,所以消息的处理是阻塞形式的。但是如果用不同的Looper则能达到并发的目的。Service中,onStart的执行也是阻塞的。如果一个startService在onStart执行完成之前,再次条用startService也会阻塞。如果希望能尽快的执行onStart则可以在onStart中使用handler,因为Message的send是非阻塞的。如果要是不同消息的处理也是并发的,则可以用不同的Looper实例化Handler。
三. 资源回收
向Handler对象发送类似new Message ()形式的空Message可以达到清空Message的目的,这种做法与getLooper().quit()的做法是一样的。如果利用的资源较多,应及时清理。
四.消息队列的先进先出原则。
五.向哪个Handler 发送消息,就必须在哪个handler 里面接收;
最新文章
- Android模拟器Genymotion如何访问本地服务器?
- eclipse与myeclipse恢复已删除的文件和代码
- 转:C# DataGridView控件清空数据出错解决方法
- PHP中最容易忘记的一些知识点总结
- hotfix分析
- FLASH 存储学习-串行SPI NOR FLASH
- Linux入门基础教程
- 编程算法 - 字典分词 代码(C)
- IP 网际协议
- 文件I/O实现cp复制功能
- Python实战之列表简单练习
- 执行查询“BACKUP LOG [XXX] TO DISK = N'F:\\BackData\\事务日至备份\\...”失败,错误如下:“无法执行 BACKUP LOG,因为当前没有数据库备份。 BACKUP LOG 正在异常终止。
- 一、Log4Net配置
- 爬虫 requests 模块
- 将pucharm与anaconda配合使用
- 【Python】正则表达式简单教程
- Jarvis OJ [XMAN]level1 write up
- Linux——vi的使用
- Ubuntu 14.04 正式版 12.4
- 初次接触Dynamics 365
热门文章
- 多容器共享volume
- 关于JPype报FileNotFoundError: [Errno 2] No such file or directory: '/usr/lib/jvm'错误的解决
- windows BAT脚本2个服务器间传递文件
- vue-element-admin实现模板打印
- C#实现异步阻塞TCP(SocketAsyncEventArgs,SendAsync,ReceiveAsync,AcceptAsync,ConnectAsync)
- 前端自动化构建工具 Webpack—— 2 webpack最基本的使用方式
- 自己写的一个用于往文件中插入字符串及空格的bat
- BZOJ 3065 带插入区间K小值 (替罪羊树套线段树)
- Gson/Jackson/FastJson工具类
- 题解 [CF916E] Jamie and Tree