我无法处理此方法:Thread.sleep()

时间:2018-03-07 13:44:49

标签: android multithreading sleep

我无法处理此方法:Android Studio中的Thread.sleep()。

我想每0.1秒用一个数字填充一个9x9大小的TextView。

enter image description here

而且,这是我的代码。

public class MainActivity extends AppCompatActivity {
    TextView[][] basicCell=new TextView[9][9];

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initVar();

        int cnt=0;
        for(int i=0; i<9; i++){
            for(int j=0; j<9; j++){
                basicCell[i][j].setText(j+"");
                basicCell[i][j].setTextColor(Color.BLACK);
                basicCell[i][j].setTextSize(20);
                basicCell[i][j].setGravity(Gravity.CENTER);

                try{
                    Thread.sleep(100);
                }catch (InterruptedException e){
                    e.printStackTrace();
                }

                Log.d("COUNT", ""+cnt++);
            }
        }
    }

TextView[][] basicCell=new TextView[9][9]

所有文字视图都与basicCells链接。

并且,预期结果屏幕如下。

enter image description here

在代码中间,

插入

try {Thread.sleep (100); }

catch (InterruptedException e) { e.printStackTrace();}

我试图每0.1秒获得一号......

当您运行应用程序时,它会保持几秒钟并且数字会立即出现。

我看了一下日志,

Log.d ("COUNT", "" + cnt ++);

在日志聊天中,日志正在努力,

屏幕处于干扰状态几秒钟,

由于cnt为80,因此数字会立即显示在屏幕上。

我认为这是模拟器滞后,所以我在智能手机上运行它,结果是一样的。

我不知道问题是什么。

有没有办法按预期看到结果?

2 个答案:

答案 0 :(得分:0)

请查看进程和线程的官方指南。您的代码正在主线程上执行,但您无法让它睡眠,因为它会冻结您的UI。另外,onCreate是为了创建你的活动而执行的,所以你不能仅仅通过在onCreate中休眠线程来更新你的UI,因为Android会等到onCreated被执行,然后它会显示你的UI。 / p>

您需要创建AsyncTask。请在这里阅读: https://developer.android.com/guide/components/processes-and-threads.html

答案 1 :(得分:0)

setText(...)setTextColor(...)等不会在屏幕上进行任何更改。它们仅更改您应用它们的TextView对象中记录的值。然后,在函数返回后,框架将要求TextView对象将自己呈现给屏幕

我不了解Android,所以我不知道事情的正确名称,但是如果你想让屏幕上的东西随着时间而改变(例如,如果你想动画< / em>你的显示器),然后你需要设置某种定时器任务---一个定期调用的回调函数。每次调用它时,它应该改变一件事(例如,更新一个单元格),然后它应该返回,以便单元格有机会将自己渲染到屏幕上。