Handler.postDelayed运行额外的时间

时间:2015-03-05 13:12:11

标签: android handler postdelayed

我正在写一个处理程序来运行修复量(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最差

1 个答案:

答案 0 :(得分:0)

您可以检查this回答并使用AlarmManager实现此行为。

正如您在documentation中看到的那样,runnable可能会有额外的延迟开始运行。您也可以查看来自@CommonsWare的this解释:

  

Android不是实时操作系统。所有postDelayed()   保证是它至少是毫秒数   指定。除此之外,主要取决于主要内容   应用程序线程正在做(如果你绑定它,它无法处理   Runnable),其次是设备上的其他内容   (服务以后台优先级运行,因此可以减少CPU时间   比前景更好。

编辑:请记住,Timer会为您的代码创建一个新线程。所以它并不依赖主线程的工作量。您可以查看有关此here

的讨论