后一种代码首先在java/android中执行
如果我是对的,这个后一种代码首先在java/android中执行,java,android,Java,Android,如果我是对的,这个活动将从上到下执行代码(隐藏键盘、禁用按钮等) 但是,当我在手机上运行此应用程序时,它会等待1000毫秒,然后将文本设置为“Right!”,更改背景等 我认为代码是自下而上执行的。我寻找答案,但什么也没找到。为什么会发生这种情况?是的,它确实从上到下运行,但这里的问题是,当UI尝试刷新它并将文本“Right!”设置为TextView时,您要求UI线程睡眠1000毫秒。在此期间,您将看不到任何渲染。所有呈现或UI更改都发生在这之后。它不像你做的那样tv.setText(“对!”)
活动将从上到下执行代码(隐藏键盘、禁用按钮等)
但是,当我在手机上运行此应用程序时,它会等待1000毫秒,然后将文本设置为“Right!”
,更改背景等
我认为代码是自下而上执行的。我寻找答案,但什么也没找到。为什么会发生这种情况?是的,它确实从上到下运行,但这里的问题是,当UI尝试刷新它并将文本“Right!”设置为TextView
时,您要求UI线程睡眠1000毫秒。在此期间,您将看不到任何渲染。所有呈现或UI更改都发生在这之后。它不像你做的那样tv.setText(“对!”)代码>或<代码>安全设置背景资源(R.drawable.safe\u打开)代码>并且它将立即发生。这些事情迫使UI重新呈现它自己,这需要一点时间(对人类来说可以忽略不计)。在框架刷新UI之前,您要求它等待,这导致延迟将这些更改应用到您要求的UI
注意:强制UI线程睡眠从来都不是一个好主意。如果您需要等待某些操作,然后应用更改,则应使用线程
和处理程序
,或者可以根据需要使用异步任务
。关于执行顺序,您是对的,但此处缺少一个关键元素-结果将在方法完成后显示但是,您的Thread.sleep
是在UI线程上完成的,因此阻止方法执行并允许操作系统渲染。
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();
}