У меня есть образец кода, который использует эту функцию для запуска потока runOnUiThread
. почему и когда нам нужно его использовать?
изменить
Как насчет использования класса AsyncTask
, что pros
и cons
??
У меня есть образец кода, который использует эту функцию для запуска потока runOnUiThread
. почему и когда нам нужно его использовать?
Как насчет использования класса AsyncTask
, что pros
и cons
??
Вы должны использовать runOnUiThread()
, когда хотите обновить свой пользовательский интерфейс из потока, отличного от UI. Например, если вы хотите обновить свой пользовательский интерфейс из фонового потока. Вы можете также использовать Handler
для той же самой вещи.
Из Документов -
Запускает указанное действие в потоке пользовательского интерфейса. Если текущий поток поток пользовательского интерфейса, то действие выполняется немедленно. Если текущий thread - это не поток пользовательского интерфейса, действие отправляется в очередь событий потока пользовательского интерфейса.
Синтаксис -
Activity_Name.this.runOnUiThread(new Runnable() {
@Override
public void run() {
// your stuff to update the UI
}
});
Обновление -
AsyncTask -
Если вы хотите сделать несколько
Network operation
или что-нибудь, что блокирует ваш пользовательский интерфейс в этом случае AsyncTask - лучшие варианты. Есть несколько другие способы выполнения тех же фоновых операций, что и вы используйтеService
,IntentService
также для выполнения фоновых операций. Использование AsyncTask поможет вам выполнить работу с пользовательским интерфейсом, а также не будет блокировать ваш пользовательский интерфейс до вашего фона. Операция продолжается.
Из Документов -
AsyncTask позволяет правильно и легко использовать поток пользовательского интерфейса. Этот класс позволяет выполнять фоновые операции и публиковать результаты в пользовательском интерфейсе нить без необходимости манипулировать потоками и/или обработчиками.
Чтобы обновить userinterface
из потока, вам нужно использовать runOnUiThread
. Но использование asynctask
лучше, чем использование runOnUiThread
. android-runonuithread-vs-asynctask эта ссылка может помочь вам