在Android中减少GUI

时间:2010-12-19 15:36:06

标签: java android multithreading sleep

我的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秒。我不知道为什么。我不知道为什么它在睡觉前没有显示我的最终分数。它实际上是空白的,表明它删除了所有视图,然后睡了。

4 个答案:

答案 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);