Handler消息机制的原理及应用场景
来源:互联网 发布:键盘记录软件 编辑:程序博客网 时间:2024/05/17 07:00
在Android系统中出于性能优化考虑,Android的UI操作并不是线程安全的,这意味着如果有多个线程并发操作UI组件,可能导致线程安全问题。为了解决这个问题,Android制定了一条简单的原则,只允许UI线程(亦即主线程)修改Activity中的UI组件。但实际上,有部分UI需要在子线程中控制其修改逻辑,因此子线程需要通过handler通知主线程修改UI,实现线程间通信。(在游戏开发中尤其常见,例如需要让新启动的线程周期性的改变UI,或者实现文件下载等。)
Handler机制主要包括四个关键对象,分别是:Message、Handler、MessageQueue、Looper。下面对这四个关键对象进行简要的介绍。
1)Message
Message是在线程之间传递的消息,它可以在内部携带少量的信息,用于在不同线程之间交换数据。Message的what字段可以用来携带一些整型数据,obj字段可以用来携带一个Object对象。
2)Handler
Handler顾名思义就是处理者的意思,它主要用于发送消息和处理消息。一般使用Handelr对象的sendMessage()方法发送消息,发出的消息经过一系列的辗转处理后,最终会传递到Handler对象的handlerMessage()方法中。
3)MessageQueue
MessageQueue是消息队列的意思,它主要用来存放通过Handler发送的消息。通过Handler发送的消息会存在MessageQueue中等待处理。每个线程中只会有一个MessageQueue对象。
4)Looper
Looper是每个线程中的MessageQueue的管家。调用Looper的loop()方法后,就会循环检查MessageQueue中是否有消息,如果MessageQueue中存在一条消息,就会将它取出,并传递到Handler的handlerMessage()方法中。此外每个线程也只会有一个Looper对象。在主线程中创建Handler对象时,系统已经为我们创建了Looper对象,所以不用手动创建Looper对象,而在子线程中创建Handler对象时,我们需要调用Looper.prepare()方法创建一个消息循环,最后调用 Looper.loop()使消息循环起作用,从消息队列中取消息,处理消息。
- Handler消息机制的原理及应用场景
- Handler的消息机制原理
- Handler(消息机制)的常用场景总结
- android中的消息机制--浅谈Handler的原理及使用
- Android Handler消息机制原理及总结
- Handler消息机制原理
- Handler消息机制原理
- Handler消息机制原理
- Android消息机制Handler的原理详解
- Android Handler消息机制从原理到应用详解
- Android--Handler使用应运及消息机制处理原理分析
- Handler消息处理机制原理
- Android消息机制(Handler原理)
- handler消息处理机制原理
- Handler,Looper消息机制原理
- Android消息机制------Handler机制的原理(超详细)
- AndRoid源码分析----------Handler消息机制(2)消息队列的建立过程及Loop循环的工作原理
- ZooKeeper的基础原理及应用场景
- BZOJ 1008: [HNOI2008]越狱
- 顺序表应用5:有序顺序表归并
- setsockopt 设置socket 详细用法
- 套接字选项(SO_RCVBUF和SO_SNDBUF)
- 【实时文件同步】rsync+inotify-tools的安装与配置
- Handler消息机制的原理及应用场景
- 设置全局键盘钩子 和 注意事项
- 反射(1)
- 沙绿色background-color:#e5eecc; border:solid 1px #c3c3c3;
- hdu5754(简单的博弈)
- UML类图实例
- 顺序表应用6:有序顺序表查询
- 每日一linux命令(39)-------lsof命令
- JavaScript操作cookie