我正在尝试在线程中运行 CountDownTimer,但它不起作用..
因此,在 MainActivitys onCreate 中,我在 Button 单击时启动它,如下所示:
public void onClick(final View v) {
Log.d("Main", "onClick");
runOnUiThread(runner);
}
runner
是实现的类的实例Runnable
:
private CountDownLatch doneSignal = new CountDownLatch(1);
@Override
public void run() {
Log.d("WR", "run");
this.countDown(20);
Log.d("WR", "waiting");
try {
doneSignal.await();
} catch (final InterruptedException ex) {
Log.e("WR", ex.getMessage(), ex);
}
Log.d("WR", "waited");
}
private void countDown(int time) {
final CountDownTimer timer = new CountDownTimer(time * 1000, 1000) {
@Override
public void onTick(final long millisUntilFinished) {
Log.d("WR", "onTick");
}
@Override
public void onFinish() {
Log.d("WR", "onFinish");
doneSignal.countDown();
}
};
Log.d("WR", "starting");
timer.start();
Log.d("WR", "started");
}
使用此代码,应用程序只会在登录 onClick、运行和启动后冻结。更改runOnUiThread(runner)
为new Thread(runner).start();
使应用程序在登录 onClick 后立即崩溃,没有更多输出。
一些研究表明,由于使用了 Handler,CountDownTimer 需要在 UI-Thread 上运行。但它只是冻结。
当我删除整个 Thread 内容并仅调用runner.run();
Buttons onClick (同时删除运行器实例中的实现 Runnable)时,我得到以下日志条目:onCLick, run, starting, started, waiting
. 但是随后什么也没有发生,好像计时器没有运行,没有调用 onTick 方法。
如何修复我的 CountDownTimer?