后面的代码首先在java / android中使用

时间:2016-02-23 09:15:06

标签: java android

if(b){ 
    mgr.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(),0);
    tv.setText("Right!");
    check.setClickable(false);
    check.setVisibility(View.INVISIBLE);
    safe.setBackgroundResource(R.drawable.safe_opened);

    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    finish();
}

如果我是对的,这个Activity将从上到下执行代码(隐藏键盘,禁用按钮等)。

然而,当我在手机上运行此应用程序时,它会等待1000毫秒,然后将文本设置为"Right!",更改背景等。

我认为代码是从下到上执行的。我搜索了答案但没有出现。为什么会发生这件事?

1 个答案:

答案 0 :(得分:2)

是的,它确实从上到下运行,但这里的问题是,当UI尝试刷新它并设置文本“正确!”时到TextView,你要求UI线程休眠1000毫秒。在此期间,您将看不到任何渲染。之后所有渲染或UI更改都会发生。这与你tv.setText("Right!");safe.setBackgroundResource(R.drawable.safe_opened);不同,它会立即发生。这些东西迫使UI重新渲染自己,这需要一点点时间(人类可以忽略不计)。在框架可以刷新UI之前,您要求它等待导致延迟将这些更改应用于您要求的UI。

注意:强制UI线程进入睡眠状态绝不是一个好主意。如果您需要等待某些操作然后应用更改,则应使用ThreadHandler,或根据需要使用AsyncTask