【问题标题】:Java Timers - Functions called not completing!Java 计时器 - 调用的函数未完成!
【发布时间】:2010-03-13 02:14:11
【问题描述】:

所以我有一个TimerTask task 在其run() 中调用一个函数onTimerComplete()

onTimerComplete() 看起来像这样:

private void onTimerComplete(){
  myFunc1();
  myFunc2();
}

我创建了一个Timer t 并安排了TimerTaskt.schedule(task, 2000);

问题是,当计时器到时并且任务运行我的onTimerComplete() 但该功能没有完成。它运行myFunc1(),但从未完成,也从未调用myFunc2()

但是,如果我直接致电onTimerComplete(),一切正常。

这是怎么回事?

【问题讨论】:

  • 我解决了这个问题!问题是我试图从与 UI 线程不同的线程更新 UI 元素,我不知道这是一个禁忌。因此,我没有使用Timer,而是创建了一个扩展AsyncTask 的类,并让它与计时器做同样的事情。现在使用扩展的AsyncTask 一切正常!

标签: java android android-asynctask


【解决方案1】:

如果myFunc1() 启动但从未完成,那么问题很可能出在该函数中。

您需要注意,此函数将在单独的线程中调用。两个线程之间可能存在某种不需要的交互。 (Description here.)

如果myFunc1() 使用了一些也用于其他并发活动的变量,您可能需要同步部分代码。 concurrency tutorial 可能会帮助您找出问题所在以及如何解决它。

【讨论】:

  • 感谢您的信息。在进一步阅读/测试后,这绝对是一个线程问题。感谢您为我指明正确的方向!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-22
相关资源
最近更新 更多