【问题标题】:Thread.sleep stopping entire function androidThread.sleep 停止整个函数android
【发布时间】:2013-12-07 16:43:17
【问题描述】:

我有一个 java 函数,我想在中间延迟。

frombox.setText(simpchi[rannum] + "\n[" + pinyin[rannum] + "]");
String meaning = meanings[rannum];
try {
        Thread.sleep(500);
    } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
        e.printStackTrace();
    }
tobox.setText(meaning.replace("/", "\n"));

我想要更改 frombox 的文本,然后在 0.5 秒后更改 tobox 的文本。

但是,在执行这个的时候,整个函数延迟,然后frombox和tobox的文本同时改变。

我做错了什么?对不起,如果这真的很简单;我对java很陌生。

【问题讨论】:

  • 今天的 Thread.sleep() 是怎么回事?刚刚在另一个问题中写了这个。要了解 sleep(),您必须了解线程。 sleep 不应该仅仅用来造成延迟。有很多线程方法可以让代码暂停并稍后执行,例如 postDelayed()。 sleep() 用于向 CPU 提供处理资源,以便在不需要执行线程时不会对线程进行时间切片(或多任务)。例如,您正在等待解决死锁

标签: java android multithreading function delay


【解决方案1】:

您不应在 UI 线程中调用 Thread.sleep()绝不! 你应该做什么:

Handler handler = new Handler();
handler.postDelayed(new Runnable(){ 
    public void run(){
        tobox.setText(meaning.replace("/", "\n"));
    }
}, 500); // 500 ms

或者简单地说(感谢zapl)

tobox.postDelayed(new Runnable(){ 
    public void run(){
        tobox.setText(meaning.replace("/", "\n"));
    }
}, 500); // 500 ms

这样第二个 settext 将被延迟并在 UI 线程中运行。

【讨论】:

猜你喜欢
  • 2013-12-30
  • 1970-01-01
  • 2014-11-23
  • 1970-01-01
  • 1970-01-01
  • 2012-12-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多