制作一个帖子

时间:2015-04-10 22:52:03

标签: java android multithreading

所以我对Android开发者来说相当新,我想让跟随代码在一个单独的线程上运行,

public void game (final Button[] temp) {
            if (temp[0].getBackground().equals(temp[1].getBackground()) )
            {
                temp[0].setVisibility(View.INVISIBLE);
                temp[1].setVisibility(View.INVISIBLE);
                finishedGame++;
            } else

            {
                temp[0].setBackgroundResource(R.drawable.black);
                temp[1].setBackgroundResource(R.drawable.black);
            }
}

所以我将代码更改为以下内容:

public void game (final Button[] temp) {
    class startGame implements Runnable {
        startGame() {}
        public synchronized void run() {
            if (temp[0].getBackground().equals(temp[1].getBackground()) )
            {
                temp[0].setVisibility(View.INVISIBLE);
                temp[1].setVisibility(View.INVISIBLE);
                finishedGame++;
            } else

            {
                temp[0].setBackgroundResource(R.drawable.black);
                temp[1].setBackgroundResource(R.drawable.black);
            }
        }
    }
}

我只是想知道我是否做得对,在我将其放入onClickListener中的onClick之前,我确切地将代码调用此方法的位置

View.OnClickListener listener1 = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            button[0].setBackground(image[0]);
            if (state == 1) {
                temp[1] = button[0];
                game(temp);
            }
        }
    };
游戏(临时)将是我以前称之为方法的方法。 我认为我需要调用线程的代码是

Thread xxx = new Thread(startGame);
xxx.start();

但我不确定,也不确定放在哪里。

1 个答案:

答案 0 :(得分:0)

UI元素(视图)的更改必须出现在主UI线程上 - 所以调用     温度[0] .setBackgroundResource(R.drawable.black); 要么     温度[0] .setVisibility(View.INVISIBLE); 会失败。

在onClick方法中执行以下操作

View.OnClickListener listener1 = new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        button[0].setBackground(image[0]);
        if (state == 1) {
            temp[1] = button[0];

            view.post(new Runnable() {
                public void run() {
                    if (temp[0].getBackground().equals(temp[1].getBackground()) )
                    {
                        temp[0].setVisibility(View.INVISIBLE);
                        temp[1].setVisibility(View.INVISIBLE);
                        finishedGame++;
                    } 
                    else
                    {
                         temp[0].setBackgroundResource(R.drawable.black);
                         temp[1].setBackgroundResource(R.drawable.black);
                    }
                }
            });
        }
    }
};