安卓定时器类Timer与消息处理类Handler


安卓串口编程中,需要循环判断串口中是否有数据到来,如果有数据到来,则接收数据。可以通过定时器类Timer和消息处理类Handler来实现以上功能。

1 定时器类Timer

Timer表示定时器类,该类可以为后台进程安排要执行的任务。每个Timer对象相对应一个后台线程,用于顺序地执行任务。

1.1 创建定时器类对象

onCreate()方法中通过new创建Timer类的对象。

Timer timer = new Timer();

1.2 定义定时器任务类对象

TimerTask表示定时器任务类,该类的全称是java.util.TimerTask。该类包含一个抽象的方法run(),该方法即为定时器指定的任务。在定义该类的对象时必须重写run()方法。

MainActivity类添加一个访问权限是private的成员变量,该变量的类型是TimerTask

private TimerTask timerTask = new TimerTask()
{
@Override
public void run()
{
Message msg = new Message();
msg.what = 1;
myHandler.sendMessage(msg);
}
};
其中,在重写的run() 方法中,向主线程发送消息,主线程收到消息之后进行后续处理。 myHandler 是消息处理类 Handler 的对象,该消息处理类在“ 2 消息处理类 Handler ”中详细介绍。

1.3 启动定时器

通过定时器类Timerschedule()方法启动定时器。该方法的格式之一为

public void schedule(TimerTask task, long delay, long period);
其中,参数task 是定时器的任务; delay 指定了在执行任务前要等待的时间; period 指定了执行任务的周期。

onCreate()方法中启动定时器。

timer.schedule(timerTask, 0, 500);
其中,timer 是在“ 1.1 创建定时器类对象”中创建的定时器类对象; timerTask 是在“ 1.2 定义定时器任务类对象”中定义的定时器任务类的对象。以上代码的作用是启动了一个定时器,该定时器每隔 0.5 秒就向主线程发送消息。

2 消息处理类Handler

1定时器类Timer”中提到,定时器每隔0.5秒就向主线程发送消息,该消息被放到程序的消息队列中,消息处理类从消息队列中取出消息并进行处理。

2.1 消息类Message

1.2 定义定时器任务类对象”中已经提到,Message表示消息类。可以通过new关键字创建消息类的对象。该类中的what字段可以保存用户自定义的消息,消息处理类可以通过该字段来判断消息不同的类型并进行不同的处理。在定义了消息对象之后,通过消息处理类Handler的对象myHandler,调用该类的sendMessage()方法,将定义的消息发送给主线程,代码见“1.2 定义定时器任务类对象”。

2.2 定义消息处理类的对象

Handler表示消息处理类。在MainActivity类中通过new关键字创建Handler类的对象myHandler。在创建对象时,需要重写Handler类的handleMessage()方法,使用该方法来处理收到的消息。

private Handler myHandler = new Handler()
{
@Override
public void handleMessage(Message msg)
{
switch(msg.what)
{
case 1:
               //判断串口中是否有数据到来,如果有数据则接收
break;
}
}
};
在以上代码中,通过new 关键字创建了 Handler 类的对象 myHandler ,该对象即为“ 1.2 定义定时器任务类对象”中提到的变量。重写了 handleMessage() 方法,在该方法中,对消息类对象 msg what 进行判断,如果该值为 1 ,则说明是“ 1.2 定义定时器任务类对象”中提到的每隔 0.5 秒就发送一次的消息。收到该消息后,判断串口中是否有数据,如果有数据,则接收。

定时器Timer与消息处理类Handler的关系如图1所示。

 

1 TimerHandler的关系

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值