我无法处理此方法:Android Studio中的Thread.sleep()。
我想每0.1秒用一个数字填充一个9x9大小的TextView。
而且,这是我的代码。
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链接。
并且,预期结果屏幕如下。
在代码中间,
插入
try {Thread.sleep (100); }
catch (InterruptedException e) { e.printStackTrace();}
我试图每0.1秒获得一号......
当您运行应用程序时,它会保持几秒钟并且数字会立即出现。
我看了一下日志,
Log.d ("COUNT", "" + cnt ++);
在日志聊天中,日志正在努力,
屏幕处于干扰状态几秒钟,
由于cnt为80,因此数字会立即显示在屏幕上。
我认为这是模拟器滞后,所以我在智能手机上运行它,结果是一样的。
我不知道问题是什么。
有没有办法按预期看到结果?
答案 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>你的显示器),然后你需要设置某种定时器任务---一个定期调用的回调函数。每次调用它时,它应该改变一件事(例如,更新一个单元格),然后它应该返回,以便单元格有机会将自己渲染到屏幕上。