我正在写一个处理程序来运行修复量(30秒)时间。基本的是它更新计数器以绘制视图组件。
counterRunnable = new Runnable() {
int currV = 0;
public void run(){
if(count >= 360) {
counterHandler.removeCallbacks(this);
onTimerComplete();
} else {
count++;
counterHandler.postDelayed(this, 83); // (30/360) = ~83
}
}
};
因为我跑回来延迟 83ms持续360次(83 * 360 = 29880ms~30秒)但是它的运行时间为 ~39秒。如果我做错了什么建议。
分析: 我使用Timer检查了相同的内容(以固定费率计划)并且它比较Handler.postDelay表现更好,但仍有任何建议为什么postDelay最差?
答案 0 :(得分:0)
您可以检查this回答并使用AlarmManager实现此行为。
正如您在documentation中看到的那样,runnable可能会有额外的延迟开始运行。您也可以查看来自@CommonsWare的this解释:
Android不是实时操作系统。所有postDelayed() 保证是它至少是毫秒数 指定。除此之外,主要取决于主要内容 应用程序线程正在做(如果你绑定它,它无法处理 Runnable),其次是设备上的其他内容 (服务以后台优先级运行,因此可以减少CPU时间 比前景更好。
编辑:请记住,Timer
会为您的代码创建一个新线程。所以它并不依赖主线程的工作量。您可以查看有关此here