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毫秒的时间间隔。

你可能感兴趣的:(android,android)