Что нового
  • Что бы вступить в ряды "Принятый кодер" Вам нужно:
    Написать 10 полезных сообщений или тем и Получить 10 симпатий.
    Для того кто не хочет терять время,может пожертвовать средства для поддержки сервеса, и вступить в ряды VIP на месяц, дополнительная информация в лс.

  • Пользаватели которые будут спамить, уходят в бан без предупреждения. Спам сообщения определяется администрацией и модератором.

  • Гость, Что бы Вы хотели увидеть на нашем Форуме? Изложить свои идеи и пожелания по улучшению форума Вы можете поделиться с нами здесь. ----> Перейдите сюда
  • Все пользователи не прошедшие проверку электронной почты будут заблокированы. Все вопросы с разблокировкой обращайтесь по адресу электронной почте : info@guardianelinks.com . Не пришло сообщение о проверке или о сбросе также сообщите нам.

Работаем С Графическим Интерфейсом Из Thread Под Android

Sascha

Заместитель Администратора
Команда форума
Администратор
Регистрация
9 Май 2015
Сообщения
1,071
Баллы
155
Возраст
51
Большинство популярных статей и руководств по многопоточному программированию в Android гласит, что из класса Thread пользовательский интерфейс недоступен и вообще рекомендуют использовать AsyncTask.

В их рекомендациях есть определённый смысл. Всё-таки AsyncTask это собственный класс Android SDK, разработанный с учётом особенностей платформы. В то время как Thread относится к стандартному Java SE.

Но, с помощью AsyncTask не всегда можно решить поставленную задачу эффективно. Более того некоторые задачи решаются только с применением Thread (особенно, если речь заходит о сложных случаях). Кроме того, для Thread можно добавить недостающие возможности по работе с интерфейсом пользователя и для этого совершенно не обязательно быть системным программистом.


Как известно в Java можно создавать собственные классы потоков наследуясь от Thread. Создадим такой класс.

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

private Activity activity;
private TextView textView;
. . .
public MyThread(Activity act, TextView tView) {
activity = act;
textView = tView;
}

В Android любое взаимодействие с пользовательским интерфейсом возможно только из UI-потока. Поэтому, нам необходимо в начале получить к нему доступ.

Для этого у класса Activity имеется специальный метод runOnUiThread. Этот метод принимает один единственный параметр – объект Runnable. В методе run этого объекта собственно и будут выполняться все манипуляции.

В нашем примере это будет просто вывод текста.

Вызов метода runOnUiThread лучше выполнять в методе run потока, как это показано в примере ниже.

@Override
public void run() {
activity.runOnUiThread(new Runnable() {
public void run() {
textView.setText("Changed!");
}
});
}

В результате выполнения данного кода в textView будет выведена надпись «Changed!».

Таким не хитрым способом можно свободно работать с графическим интерфейсом из Thread потока.
 
Вверх