请看这个定义:
* @param jumpFrame 时钟是否跳帧。基于时间的循环回调,单位时间间隔内,如能执行多次回调,出于性能考虑,引擎默认只执行一次,设置jumpFrame=true后,则回调会连续执行多次
再看laya.core.js中Timer._update()方法的这段代码:
if (handler.repeat){
if (!handler.jumpFrame){
handler.exeTime+=handler.delay;
handler.run(false);
if (t > handler.exeTime){
handler.exeTime+=Math.ceil((t-handler.exeTime)/ handler.delay)*handler.delay;
}
}else {
while (t >=handler.exeTime){
handler.exeTime+=handler.delay;
handler.run(false);
}
}
}else {
handler.run(true);
}
看出问题来了吗?Timer._update中对jumpFrame的使用和定义刚好是相反的!
先不吐槽这个。
真正的问题在于,对于不跳帧的timer.loop(),那么它将在切后台再切回来后被执行很多很多...次。这就是造成切后台返回前台卡顿的原因,而且,切后台时间越长,卡顿也就越久。
解决办法?限制不跳帧执行的最大次数(比如5次)。