Java Android onCreate:Thread.sleep()导致以意外方式绘制内容
在正式介绍了并发性之后,我对并发性感到相当满意。由于我是Android新手,我开始编写一个简单的活动,它连续递归调用自己10次,并打印递归的深度 整个代码包含在onCreate方法中:Java Android onCreate:Thread.sleep()导致以意外方式绘制内容,java,android,multithreading,concurrency,Java,Android,Multithreading,Concurrency,在正式介绍了并发性之后,我对并发性感到相当满意。由于我是Android新手,我开始编写一个简单的活动,它连续递归调用自己10次,并打印递归的深度 整个代码包含在onCreate方法中: protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Get recursion count
Intent wasStartedWith = getIntent();
final int cnt = wasStartedWith.getIntExtra("count", 0);
// Update UI
runOnUiThread(new Runnable() {
@Override
public void run() {
TextView tv = findViewById(R.id.textView);
tv.setText(cnt + "th recursive call");
}
});
// Sleep 500ms before (possible) recursive call
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
// Check if non-basecase
if (cnt != 10)
{
// Recursive call
Intent recursiveIntent = new Intent(this, MainActivity.class);
recursiveIntent.putExtra("count", cnt + 1);
startActivity(recursiveIntent);
}
}
考虑到该方法的顺序性,我希望执行顺序如下:
你在一个错误的前提下工作。UI线程确实是应用程序的主线程。
Thread.sleep()
挂起了UI线程,这就是为什么没有立即绘制的原因。哦,哇,我只是假设runOnUiThread的命名将被视为“在专用UI线程上运行”。。。我想并不是一切都像看上去的那样。刚刚检查了文档(),我发现了一行:“如果当前线程是UI线程,那么立即执行操作。”根据这行,我仍然希望整个UI更新(和绘图)在线程之前进行。sleep()?UI事件和更新通过消息队列处理。您首先进行的那些UI修改(实际上,整个初始布局和绘图)基本上只是排队,当您在onCreate()
中执行sleep()
时,会挂起整个线程,包括消息队列的处理,因此UI布局和绘图,包括您的更新,直到sleep()才会发生
已完成。跟着我?