Для обновления GUI из других потоков существует два основных подхода:
Используйте java.lang.Runnable с любым из этих методов:
Activity.runOnUiThread(Runnable)
View.post(Работоспособный)
View.postDelayed(Runnable, long)
Handler.post(Запускаемый)
Используйте android.os.Message:
Handler.sendMessage(Message) / Handler.handleMessage(Message)
Вы также можете использовать AsyncTask, но мой вопрос больше касается случая использования обновления очень простого компонента. Давайте посмотрим, как это будет сделано с использованием обоих подходов:
Используя Runnables:
TextViev tv = ...;
окончательные данные строки = "привет";
Runnable r = новый Runnable () {
@Override
публичный недействительный запуск () {
тв.setText (данные);
}
};
//Теперь вызовите Activity.runOnUiThread(r) или handler.post(r), ...
Использование сообщений:
Сообщение m = handler.obtainMessage(UPDATE_TEXT_VIEW, "hello");
обработчик.отправитьСообщение(м);
// Теперь о реализации обработчика:
@Override
public void handleMessage (сообщение msg) {
если (msg.what == UPDATE_TEXT_VIEW){
Строка s = (Строка) msg.obj;
тв.setText (данные);
} ... //другие ЕСЛИ?
}
ИМХО, сообщения не подходят, потому что:
С другой стороны, Runnables следуют хорошо известному шаблону команд и более удобны для программиста и читабельны.
Итак, каковы преимущества использования Messages по сравнению с Runnables? Отодвинуты ли сообщения на задний план в современном программировании для Android? Есть ли что-то, что вы можете сделать с сообщениями, чего нельзя сделать с помощью Runnables?
Заранее спасибо.