使用handler.postDelayed时获取剩余时间

3

我正在使用handler.postDelayed方法来为一些动画效果创建延迟。 就像这样:

Handler h = new Handler();
h.postDelayed(new Runnable() {
  @Override
  public void run() {
    // Start Animation.
  }
}, 6000);

稍后,我如何获得动画开始前的剩余时间?

不明白你想做什么... - pskink
嗨,我想知道延迟任务执行的剩余时间。 - Hemanth
使用 SystemClock.uptimeMilis() 来计算时间差。 - pskink
1个回答

3
当您调用postDelayed时,可以将时间简单地保存在一个变量中。
 long startTime = System.nanoTime();
 h.postDelayed(...

当您需要检查剩余时间时,可以计算已经流逝的时间来获取。

 long elapsedTime = System.nanoTime()-startTime;

所以在您的情况下
 long remainingTime = 6000 - elapsedTime;

谢谢。我知道我可以使用这个来获取剩余时间。但是,Handler是否提供了一种方便的方法来计算剩余时间? - Hemanth
剩余时间是关于什么的? - pskink
@hemanth2081 处理程序没有更好的方法来完成这个任务。 - axl coder
有时候,elapsedTime 会超过 6000(因为任务不能保证在 6000 毫秒后准确执行)。在这种情况下,remainingTime 将是负数。 - Hemanth
是的,不幸的是,使用 handler 您没有那种精度。如果您需要那种精度,我建议您查看 Timer 或 AlarmManager。 - axl coder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接