在Android系统中Activity View的更新的操作是非线程安全的,例如:如果多个线程并发的去操作同一个View,那么系统就可能不知道如何处理而导致程序无法快速响应而崩溃。为了防止出现这个问题,Android官方就规定了只允许创建该UI的线程来修改UI组件的属性,也就是必须是单线程模型。但是如果子线程涉及到主线程中UI的更新,就要使用Handler消息机制完成UI进行更新操作。
在本项目中,蓝牙设备间的连接和通信线程就属于子线程(主线程通常都是UI线程),那么要使得蓝牙线程中接受或者发出的消息显示到主线程中,就需要用到Android的Handler消息机制。Handler机制是Android中的一种消息的异步处理机制,其简单的工作原理如下图所示:
与Handler工作的几个组件Looper、MessageQueue的作用:
Handler:其它子线程将把消息发送给Looper管理的MessageQueue,并负责处理Looper分给它的消息——通过重写HandlerMessage()方法处理消息。
MessageQueue:采用消息队列的方式来管理Message。
Looper:功能是管理MessageQueue,不断的从该消息队列中取消息,并将相对应的消息分给Handler处理。