Android: вызов методов в потоке пользовательского интерфейса из метода AsyncTask doInBackground
Я использую AsyncTask для загрузки данных в пользовательский интерфейс. Я написал код для загрузки данных с сервера в отдельный метод, и я вызываю этот метод из doinBackground. Это даст ошибку, потому что методы пользовательского интерфейса не могут получить доступ из doInBackground.but, я хочу получить доступ. любой альтернативный процесс доступен для доступа к пользовательскому интерфейсу из doinBackground.?
Ответы
Ответ 1
любой альтернативный процесс есть для доступа к UI-методу из doinBackground.?
Вызвать publishProgress()
в doInBackground()
. Поместите логику обновления UI в onProgressUpdate()
вашего AsyncTask
. onProgressUpdate()
будет вызываться в главном потоке приложения (a.k.a., поток пользовательского интерфейса) после вызова publishProgress()
. Вот пример проекта, демонстрирующий это.
Ответ 2
Вызов runOnUiThread (Runnable action)
подробнее здесь
Ответ 3
Как указывали другие, вы можете использовать runOnUiThread. Но, кажется немного странным, что вы хотели бы сделать это в своем doInBackground. Если вы хотите указать прогресс для пользователя, вы бы хотели обработать его в AsyncTask.onProgressUpdate и вызывать publishProgress в своем doInBackground.
Подробнее о AsyncTask можно прочитать здесь: http://developer.android.com/reference/android/os/AsyncTask.html
Дан
Ответ 4
Используйте doInBackground()
только для задач, которые:
- Найдите время
- Не связаны с пользовательским интерфейсом
Затем вы можете реализовать AsyncTask.onPostExecute()
для запуска кода для обработки этих результатов в основном потоке пользовательского интерфейса из AsyncTask
Из JavaDoc для AsyncTask.onPostExecute()
:
"Выполняется в потоке пользовательского интерфейса после doInBackground...."