首页 > 解决方案 > backgroundResource 的异步任务

问题描述

我有一个 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

标签: androidandroid-asynctaskandroid-drawableandroid-thread

解决方案


你忘了启动线程。

run()方法不会创建新线程,而是在主线程中运行可运行实例。start()创建一个新的线程实例。所以像这样创建一个新的后台线程

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

thread.start();

推荐阅读