Android
Нить
Поиск…
Пример темы с описанием
При запуске приложения сначала выполняется основной поток. Этот основной поток обрабатывает все концепции приложения пользовательского интерфейса. Если мы хотим долго запускать задачу, в которой нам не нужен пользовательский интерфейс, мы используем 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();
}
}