在我的应用程序中,我想显示随机数,它们之间有3秒的延迟。虽然命令被推迟了,但我想祝酒。
public void random(View v)
{
Toast myToast = Toast.makeText(this, "Wait...", Toast.LENGTH_LONG);
myToast.show();
try{
Thread.sleep(3000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
int number= random.nextInt(6) + 1;
// ...
我尝试了这个代码,但它先延迟,然后显示Toast。我希望Toast显示在数字之间。有人能帮我吗?
谢谢,Marco
试试这个:
这将每3秒得到一个随机数,并显示一个Toast。
Handler handler=new Handler();
handler.postDelayed(new Runnable(){
public void run() {
int number= random.nextInt(6) + 1;
.......
Toast myToast = Toast.makeText(getApplicationContext(), "Wait...", Toast.LENGTH_SHORT);
myToast.show();
}}, 3000);
您不需要设置UI线程睡眠。Timer和TimerTask的概念就是为了这样的目的。
private void testTimer(){
TimerTask task = new TimerTask() {
@Override
public void run() {
//random number generation;
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(YourActivityOrContext.this, "Wait...", Toast.LENGTH_LONG).show();
}
});
}
};
Timer t = new Timer();
t.schedule(task, 3000);
}
这并不比兰吉思的解决方案"更好",只是另一个。实际上Timer和TimerTask是Java,而Handler是Android。但是运行OnUiThread,您需要使用它,因为只有UI线程具有访问它的视图,也将使用Handler。