android handler message 重复调用

今天遇到一个问题:

需求是将一个业务流程用 timer 和 handler 进行模拟,而这个业务流程的步骤会比较多,实现的大概思路是这样的,用timer 间隔时间段调用 handler 实现逻辑 ,handler的逻辑实现完成后再次调用timer,timer再调用下一步的handler 这样就是一个循环可以将流程一步一步的按顺序自动执行下去;问题就出在handler和timer循环互相调用的过程中,当timer的period参数设定的时间间隔极短(小于100毫秒)的时候,发现会偶尔出现同一个handler message 对应的逻辑会被重复调用多次,最后跟踪发现是 handler message hoope 线程池会有延迟,当间隔极短的时候再 调用下一个message 对应的逻辑 的时候,要先清除之前的message,不然当前的message和上一个甚至是上两个message对应的逻辑会混乱。

代码示例如下:

@Override
public boolean handleMessage(Message msg) {

   
    switch (msg.what) {
        case 0: {
             circleFunOver();//结束timer 的方法  
             handler.removeMessages(0);//handler清除message的方法,0是message的what,这个逻辑运行完就清除对应的message;
             circleFun(1,0, 50);//调用timer的方法,1是下一个handler的message;50是时间间隔毫秒级很短了。
                    }
                }
            }
        }
        break;

}

这个方式虽然可以将流程按照步骤顺序执行下去避免了不容message的混乱,但是跟踪发现,有时候timer执行两次handler才会执行一次,当timer的period时间间隔参数设定到300毫秒时候,timer执行一次handler就会执行一次,而且即使不调用handler.removeMessages()方法message也不会混乱,所以轻易不要设定少于300毫秒的时间间隔。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值