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!"
,更改背景等。
我认为代码是从下到上执行的。我搜索了答案但没有出现。为什么会发生这件事?
答案 0 :(得分:2)
是的,它确实从上到下运行,但这里的问题是,当UI尝试刷新它并设置文本“正确!”时到TextView
,你要求UI线程休眠1000毫秒。在此期间,您将看不到任何渲染。之后所有渲染或UI更改都会发生。这与你tv.setText("Right!");
或safe.setBackgroundResource(R.drawable.safe_opened);
不同,它会立即发生。这些东西迫使UI重新渲染自己,这需要一点点时间(人类可以忽略不计)。在框架可以刷新UI之前,您要求它等待导致延迟将这些更改应用于您要求的UI。
注意:强制UI线程进入睡眠状态绝不是一个好主意。如果您需要等待某些操作然后应用更改,则应使用Thread
和Handler
,或根据需要使用AsyncTask
。