我的Android应用程序工作正常,除了结束序列。它是一个游戏,最后屏幕显示得分:
TextView allscores = new TextView(this);
allscores.setText("Your score: "+ mypoints);
接下来我希望GUI减速几秒钟,以便用户有时间接收信息。也许2或3秒就可以了。
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
layout.removeAllViews();
请记住,我是线程编程的新手。所有这些都是在UI线程上完成的,我没有其他线程在运行。 接下来,我将最终的闪屏结束:
AnView animator = new AnView(this);
layout.addView(animator);
其中AnView是我自己的View扩展。
总而言之,它运行得很好。问题是线程在没有显示最终分数的情况下休眠3秒。我不知道为什么。我不知道为什么它在睡觉前没有显示我的最终分数。它实际上是空白的,表明它删除了所有视图,然后睡了。
答案 0 :(得分:3)
您没有看到分数,因为在UI线程上睡眠会阻止使文本更改可见的布局和绘图操作。永远不要睡在UI线程上。
为此使用新线程是过度的。使用Handler和postDelayed方法在延迟后发生一些事情。
private final Handler mHandler = new Handler();
然后当你想稍后做某事时,
mHandler.postDelayed(new Runnable() {
public void run() {
doDelayedThing();
}
}, 3000);
答案 1 :(得分:3)
正如其他人所指出的:不要在UI线程中使用sleep
。
您应该做的事情在这里描述:
http://developer.android.com/guide/appendix/faq/commontasks.html#threading
在“处理UI线程中的昂贵操作”部分
答案 2 :(得分:1)
不建议永远睡眠主UI线程。尝试这样的事情:
new Thread(new Runnable(){ //在这里工作 });
或者你可以尝试使用Toast弹出窗口来获得分数。
答案 3 :(得分:1)
您也可以使用Timer等待3秒,这将在时间用完后启动新线程。
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
AnView animator = new AnView(this);
layout.addView(animator);
}
}, 3000);