1

在活动开始时不断更改 imageview 图像。不使用 Thread 是否可行?至少告诉我如何正确使用 Thread 以及我应该如何启动它。请。,

这是一个像安卓游戏一样的鼹鼠。


我试图做简单的随机文本显示,但没有奏效。

public class NewGame extends Activity {

    gameThread gameOn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.newgame);

        hView = (TextView) findViewById(R.id.HammersText);
        gameOn = new gameThread();
        gameOn.start();
    }
}

public class gameThread extends Thread
{
    NewGame gameOn;

    public void run() {
        super.run();

        Random ramhole = new Random();
        int hole = ramhole.nextInt(8);

        Random ramletter = new Random();
        int letter = ramletter.nextInt(26);

        gameOn = new NewGame();

        gameOn.hView.setText("Hole = "+hole+"Letter = "+letter);
    }

}

请帮我解决这个问题。

4

2 回答 2

0

使用 countdownTimer 而不是 Thread

new CountDownTimer(9000000, 5000) {

 public void onTick(long millisUntilFinished) {
       Random ramhole = new Random();
        int hole = ramhole.nextInt(8);

        Random ramletter = new Random();
        int letter = ramletter.nextInt(26);
        hView.setText("Hole = "+hole+"Letter = "+letter);
 }

 public void onFinish() {
   //Restart timer if you want.
 }
}.start();

您仍然可以使用 Threading 进行操作,但对于您正在尝试做的事情来说,这太过分了。同样在你的情况下,你不能做

gameOn = new NewGame();  

Activity 总是需要被框架初始化。并且应该始终从 Ui 线程调用 setText api。也许这就是您的应用无法运行的原因

于 2012-10-19T17:45:24.437 回答
0

您应该只在主 UI 线程上触摸 UI,因此如果您决定使用线程,那么您应该查看AsyncTask

如果是我的游戏,我会为每个洞启动一个新的 AsyncTask。在 doInBackground 中,它会随机休眠一段时间,然后发布进度。在每个甚至 onProgressUpdate 中,它都会显示痣。在每一个奇怪的 onProgressUpdate 中,它都会隐藏痣(如果它没有被击打。)通过处理 onProgressUpdate 中的显示/隐藏,你会自动在主 UI 线程上,所以不用担心,每个洞都有一个单独的线程将允许你有一个更有活力的洞/痣的竞争环境。

于 2012-10-19T17:51:42.180 回答