蓝牙之四-Handler

本文介绍了Android中的Handler机制,它允许在不同线程间调度任务和通信。Handler创建后与特定线程的消息队列绑定,可用于延迟执行任务或实现超时行为。应用实例中提到了蓝牙管理的核心服务BluetoothManagerService.java,该服务如何利用Handler和消息类型进行通信将在后续博客中进一步探讨。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Handler机制

Handler允许用户发送和处理Message以及线程MessageQueue相关的可运行对象。每个Handler实例都对应一个单线程以及该线程的MessageQueue。当创建新的Handler时,该Handler将被绑定到该线程创建该Handler的Message queue上。从那时起,Handler可以发送message到MessageQueue,当message从MessageQueue出来时可以被Handler处理。
Handler有两个主要应用场景:(1)调度message并让在未来某一时刻执行。(2)将一个不同于当前线程的方法放在Message queue上供另一个线程使用。

Message发送使用postpostAtTime(Runnable, long)postDelayed
sendEmptyMessagesendMessagesendMessageAtTimesendMessageDelayed
post方法发送的消息允许用户添加可以被message queue调用的Runable对象。
sendMessage方法运行将含有一些数据的Message对象放到队列上,该Message将被ha

### STM32与HC-08蓝牙模块通信教程 #### 一、硬件连接 为了使STM32能够成功地与HC-08蓝牙模块建立通信,需按照特定的方式连接两者。通常情况下,VCC接电源正极,GND接地;TXD(发送端)应接到MCU的接收引脚上,而RXD(接收端)则连到MCU的发送引脚上[^2]。 #### 二、初始化设置 在程序启动初期,应对串口接口进行必要的参数设定,比如波特率的选择等。对于HC-08来说,默认工作模式下其波特率为9600bps,在实际应用过程中可根据需求调整此数值。此外还需注意的是,部分版本的HC-08支持AT指令集用于更改设备的工作状态以及查询当前配置情况。 ```c // 初始化USART1, 波特率设为9600 bps void USART_Configuration(void){ GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE); // 配置PA9作为USART1_TX, PA10作为USART1_RX GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA,&GPIO_InitStructure); USART_InitStructure.USART_BaudRate=9600; USART_InitStructure.USART_WordLength=USART_WordLength_8b;// 字符长度为8位数据格式 USART_InitStructure.USART_StopBits=USART_StopBits_1; USART_InitStructure.USART_Parity=USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx; USART_Init(USART1,&USART_InitStructure); USART_Cmd(USART1,ENABLE); } ``` #### 三、数据收发处理函数编写 当完成上述准备工作之后,则可以着手构建具体的数据交换逻辑了。这里给出一段简单的例子来展示如何向远程终端发送字符串消息并等待回应: ```c #include "stm32f1xx_hal.h" UART_HandleTypeDef huart1; char buffer[20]="Hello World!"; int main(){ HAL_Init(); SystemClock_Config(); MX_USART1_UART_Init(); while (1) { HAL_UART_Transmit(&huart1,(uint8_t*)buffer,strlen(buffer),HAL_MAX_DELAY); HAL_Delay(1000); } } static void MX_USART1_UART_Init(void){ huart1.Instance=USART1; huart1.Init.BaudRate=9600; huart1.Init.WordLength=UART_WORDLENGTH_8B; huart1.Init.StopBits=UART_STOPBITS_1; huart1.Init.Parity=UART_PARITY_NONE; huart1.Init.Mode=UART_MODE_TX_RX; huart1.Init.HwFlowCtl=UART_HWCONTROL_NONE; huart1.Init.OverSampling=UART_OVERSAMPLING_16; if(HAL_UART_Init(&huart1)!=HAL_OK){ Error_Handler(); } } ``` 以上代码实现了每隔一秒向蓝牙模块发送一次“Hello World!”的信息流操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shichaog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值