我的UI线程没有正常睡眠

时间:2012-02-03 02:13:24

标签: android multithreading view

我正在制作一个15拼图(http://en.wikipedia.org/wiki/Fifteen_puzzle)游戏,我有一个活动供用户选择背景图像,然后我将该图像传递给新活动为了缩放和裁剪它。

现在我想首先向用户展示解决方案3秒,然后它会随机播放,我正在使用这样的代码:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    //...skip the code that gets the image and scales it 

    start();
}

然后在我的开始()函数中:

public void start() {

    //the createPuzzle function would create all the Views(tiles)
    //and add them to the root LinearLayout using addView() function
    createPuzzle(game.getBoardConfig(), dimension);

    //i was trying to sleep here

    shuffle();
}

我用过:

try {
    Thread.sleep(3000);
} catch (InterruptedException e) {}

或:

SystemClock.sleep(3000);

但它们都没有正常工作,他们在我选择图像后立即暂停了线程,当它暂停时我看不到新活动和我创建的图块。当线程恢复时,它已经显示出混乱的拼图。

我一直在查看文档很长一段时间,但仍无法弄清楚我的代码有什么问题,感谢您的帮助!

1 个答案:

答案 0 :(得分:7)

不要让UI线程休眠,因为这会锁定整个UI线程,这是禁忌。相反,使用Handler发布延迟的runnable ......比如

Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 
         public void run() { 
              shuffle(); 
         } 
    }, 3000);