Асинхронная задача для backgroundResource - PullRequest
0 голосов
/ 24 апреля 2018

У меня есть imageButton, который изменяется в зависимости от некоторых переменных, и я хотел бы, чтобы этот процесс происходил в фоновом режиме.

Я пытался поместить его в поток, но я не понимаю AsyncTaskэто еще не все.

public void initGameButtonOne() {
    new Thread(new Runnable() {
        @Override
        public void run() {
            final ImageButton gameButton1 = getView().findViewById(R.id.multiPlayerGameButton1);
            final ImageButton gameButton2 = getView().findViewById(R.id.multiPlayerGameButton2);
            final ImageButton gameButton3 = getView().findViewById(R.id.multiPlayerGameButton3);
            final ImageButton gameButton4 = getView().findViewById(R.id.multiPlayerGameButton4);
            final ImageButton gameButton5 = getView().findViewById(R.id.multiPlayerGameButton5);
            final ImageButton gameButton6 = getView().findViewById(R.id.multiPlayerGameButton6);
            final ImageButton gameButton7 = getView().findViewById(R.id.multiPlayerGameButton7);
            final ImageButton gameButton8 = getView().findViewById(R.id.multiPlayerGameButton8);
            final ImageButton gameButton9 = getView().findViewById(R.id.multiPlayerGameButton9);
            gameButton1.getBackground().setAlpha(0);
            gameButton1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (player1Turn) {
                        gameButton1.setBackgroundResource(R.drawable.gameobutton);
                        gameButton1.getLayoutParams().height = 300;
                        gameButton1.getLayoutParams().width = 300;
                        gameButton1.getBackground().setAlpha(255);
                        gameButton1.setClickable(false);
                        player1Turn = !player1Turn;
                        player1ClickedButton1 = true;
                        if (!gameButton1.isClickable() &&
                                !gameButton2.isClickable() &&
                                !gameButton3.isClickable() &&
                                !gameButton4.isClickable() &&
                                !gameButton5.isClickable() &&
                                !gameButton6.isClickable() &&
                                !gameButton7.isClickable() &&
                                !gameButton8.isClickable() &&
                                !gameButton9.isClickable()) {
                            goToPlayerDrawScreen(getView());
                        }
                        checkPlayer1WinCondition();

                    } else {
                        gameButton1.setBackgroundResource(R.drawable.gamexbutton);
                        gameButton1.getLayoutParams().height = 220;
                        gameButton1.getLayoutParams().width = 220;
                        gameButton1.getBackground().setAlpha(255);
                        gameButton1.setClickable(false);
                        player1Turn = !player1Turn;
                        player2ClickedButton1 = true;
                        checkPlayer2WinCondition();
                    }
                }
            });
        }
    }).run();
}

Дело в том, что я просто хочу, чтобы фоновый ресурс и параметры макета происходили в фоновом режиме, и я не понимаю, почему это дает мне такую ​​низкую производительность в главном потокекогда я уже положил его в новую ветку.

Отсюда мой переход к AsyncTask

1 Ответ

0 голосов
/ 24 апреля 2018

Вы забыли запустить поток.

run() метод не создает новый поток, но запускает запускаемый экземпляр в основном потоке. start() создает новый экземпляр потока.Поэтому создайте новый фоновый поток, как этот

Thread thread = new Thread() {
    @Override
    public void run() {
       //your code
    }
};

thread.start();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...