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!”
、更改背景等等。
我认为代码是自下而上执行的。我搜索了答案,但没有找到任何答案。为什么会出现这种情况?
最佳答案
是的,它确实从上到下运行,但这里的问题是当 UI 尝试刷新它并设置文本“Right!”时对于 TextView
,您要求 UI 线程 hibernate 1000 毫秒。在那段时间你不会看到任何渲染。所有渲染或 UI 更改都在此之后发生。这不像您执行 tv.setText("Right!");
或 safe.setBackgroundResource(R.drawable.safe_opened);
它会立即发生。这些东西迫使 UI 重新渲染自己,这需要一点时间(对人类来说可以忽略不计)。在 Framework 刷新 UI 之前,您要求它等待,这导致延迟将这些更改应用到您要求的 UI。
注意:强制 UI 线程 hibernate 绝不是一个好主意。如果您需要等待一些操作然后应用更改,您应该使用 Thread
和 Handler
或者可以根据需要使用 AsyncTask
。
关于java - 字母代码在java/android中首先执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35573313/