Поиск…


Пример темы с описанием

При запуске приложения сначала выполняется основной поток. Этот основной поток обрабатывает все концепции приложения пользовательского интерфейса. Если мы хотим долго запускать задачу, в которой нам не нужен пользовательский интерфейс, мы используем thread для выполнения этой задачи в фоновом режиме.

Вот пример Thread, который описывает удар:

new Thread(new Runnable() {
    public void run() {
        for(int i = 1; i < 5;i++) {  
            System.out.println(i);  
        }
    }
}).start();

Мы можем создать поток, создав объект Thread, у которого есть Thread.run() для запуска thread.Here, метод run() вызывается методом start() .

Мы также можем запускать несколько потоков независимо друг от друга, что называется MultiThreading. В этом потоке также есть функциональность сна, с помощью которой текущий исполняемый поток будет спать (временно прекратить выполнение) за указанное количество времени. Но sleep бросает InterruptedException Итак, мы должны справиться с этим, используя try / catch, как это.

try{Thread.sleep(500);}catch(InterruptedException e){System.out.println(e);}

Обновление пользовательского интерфейса из фоновой темы

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

Это создает проблему, так как только основной поток может обновлять пользовательский интерфейс.

Решение заключается в использовании runOnUiThread() , поскольку он позволяет вам инициировать выполнение кода в потоке пользовательского интерфейса из фонового потока.

В этом простом примере поток запускается при создании Activity, выполняется до тех пор, пока магическое число 42 будет произвольно сгенерировано, а затем использует метод runOnUiThread() для обновления пользовательского интерфейса после выполнения этого условия.

public class MainActivity extends AppCompatActivity {

    TextView mTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mTextView = (TextView) findViewById(R.id.my_text_view);

        new Thread(new Runnable() {
            @Override
            public void run() {
                while (true) {
                    //do stuff....
                    Random r = new Random();
                    if (r.nextInt(100) == 42) {
                       break;
                    }
                }

                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        mTextView.setText("Ready Player One");
                    }
                });
            }
        }).start();
    }
}


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow