【发布时间】:2018-09-03 15:03:15
【问题描述】:
我有基于 CountDownTimer 的游戏,它不断重复倒计时。此 countDown 正在计算用户对与 number 相关的某些操作做出反应的时间,如果用户反应 onFinish() 由一些 clickListener 调用,或者如果时间到了则由其自身调用。取决于succesCondition(),方法success 或fail 被调用,这些方法定义游戏是否仍在运行。
创建时
loop = gameLoop(time).start();
主活动
public CountDownTimer gameLoop(int time){
return new CountDownTimer(time, time+100) {
@Override
public void onTick(long millisUntilFinished) {
}
@Override
public void onFinish() {
if (!Conditions.succesCondition(number)) {
success();
} else {
fail();
}
}
};
}
public void success() {
loop.cancel();
scoreCount++;
animation.start();
}
public void fail(){
loop.cancel();
}
但是,这个计时器在主线程上运行,并且提供了众所周知的问题skipped xx frames, your app might be doing too much work on its main thread,我发现这是CountDownTimer 的常见问题,用Handler 替换它是一个解决方案。
我不能把这个计时器放在AsyncTask 中,因为它主要在success() 方法中执行与 UI 相关的任务(TextViews、TextSwitcher、一些进度条等。我没有把它放在这些方法的代码中以更简洁主要问题的观点。我正在尝试使用处理程序重建 CountDownTimer- 类似的概念,并且可以运行以替换我的计时器,但实际上我什么也没有。如您所见,我只使用 onFinish 方法, onTick 不是必需的。
【问题讨论】:
-
执行与 countDownTimer 行为相似的处理程序并不容易
-
不,我不知道,我以前看过 countDownTimer 类,但我不知道如何自己重写它
-
那么
Handler有什么不清楚的地方吗?哪些方法调用难以理解? -
不是说不清楚,但如果我只是通过重写计时器类来做到这一点,那么性能不会有任何差异
-
so
CountDownTimer不是罪魁祸首,但您的onTick方法在 UI 线程上做了太多工作
标签: java android countdowntimer android-handler