在while循环中更新Android-UI的最佳方式

时间:2017-02-24 07:57:22

标签: android multithreading user-interface while-loop tetris

我正在使用俄罗斯方块应用程序,我有一个Thread.sleep命令来动画tetriminos的下降。但这会造成与UI的冲突。所以我尝试了像这样的runOnUiThread():

while (gameover == false) { 
    tetriminoSettled = false;
    try {
        Thread.sleep(1000 - (counter * 3));
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            Random ran = new Random();
            int x = ran.nextInt(7) + 1;
            addTetrimino(createTetrimino(x)); //the UI operation
            gridView.invalidate();
        }
    });

但是UI只会在游戏结束后更新。 你认为AsyncTask是一个好方法吗? 请尽量记住,我后来需要额外的UI-Threads来左右移动tetriminos等等。 谢谢!

2 个答案:

答案 0 :(得分:1)

根据您发布的代码判断,您似乎正在使用gridview进行游戏。这是可能的,但不值得努力。只需使用SurfaceView,如此简短tutorial所示。您将有一个onDraw回调,您可以在其中更新每个绘图周期的任何内容。玩得开心,编码游戏真的很难:)。

答案 1 :(得分:0)

尝试gridView.postInvalidate();