android oncreate:thread.sleep()导致以意外的方式绘制内容

lbsnaicq  于 2021-07-05  发布在  Java
关注(0)|答案(0)|浏览(210)

在正式介绍了并发性之后,我对并发性感到相当满意。由于我是android新手,我开始编写一个简单的活动,它连续递归调用自己10次,并打印递归的深度。
整个代码包含在oncreate方法中:

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);
        }
}

考虑到该方法的顺序性,我希望执行顺序如下:
从启动器调用的活动
runonuithread被调用时,runnable对象被传递给ui线程,该线程同时更新textview
主线程(!=ui线程)休眠500毫秒
主线程,假设它没有被中断,检查它是否是第10个递归调用。如果没有,它将创建一个新的意图,填充一个额外的意图并分派它。
转到2
令人困惑的是,我在打开应用程序时出现了非常奇怪的行为:
屏幕是空白的,甚至没有标题栏显示
几百毫秒后,屏幕会短暂地闪烁几毫秒预期的内容
转到1
在这个执行过程中,在第2步(1、3、5、7、9、10)中,实际上几乎每秒钟都会显示一次递归调用。
我的问题:
既然ui线程同时运行(即不受主线程的thread.sleep()的影响),为什么在活动启动时屏幕没有画对呢?
我应该怎么做才能得到预期的行为?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题