睡在android中不起作用

时间:2014-01-07 15:36:33

标签: android sleep

嗯,我只想按一个按钮并在其中显示倒计时,但是当我按下按钮时程序停止并最终显示数字1但不显示3或2。

btnTurno.setOnClickListener(new View.OnClickListener() 
{
    public void onClick(View v) {
        btnTurno.setText("3");
        SystemClock.sleep(1000);
        btnTurno.setText("2");
        SystemClock.sleep(1000);
        btnTurno.setText("1");
    }
});

我做错了什么?

3 个答案:

答案 0 :(得分:3)

首先,Sleep应该被称为Thread.sleep(x);

但另一方面,不推荐睡眠,因为它会阻止用户与应用程序的交互。

如果你想倒计时(因为它看起来像你在做什么),你应该看看这个 http://developer.android.com/reference/android/os/CountDownTimer.html

答案 1 :(得分:1)

onClick正在GUI线程上的单个处理程序消息中执行,因此每次更改文本时,它都会覆盖以前的值,因此系统无法重绘视图。

另外你不应该在主gui线程上调用sleep(),这会导致ANR - 应用程序没有响应

答案 2 :(得分:1)

设置文本和绘制文本是在同一个线程上发生的单独操作。你在框架有机会绘制任何东西之前设置了三次文本,所以你看到的只是最后一次改变。

为此,您需要进行文本更新并在单独的线程上休眠。但是,您无法直接在其他线程上进行UI调用,因此您需要发布消息。

一种方法是创建AsyncTask,并使用上面的代码,但请拨打当前正在调用publishProgress()的{​​{1}}。异步线程中的setText()调用导致在{i}}线程中运行publishProgress();从那里,您可以致电onProgressUpdate()来更新用户界面。

修改:不同答案中提到的setText()方法更好。