Android: вызов методов в потоке пользовательского интерфейса из метода AsyncTask doInBackground - PullRequest
15 голосов
/ 15 марта 2012

Я использую AsyncTask для загрузки данных в пользовательский интерфейс. я написал код для загрузки данных с сервера отдельным методом, и я вызываю этот метод из doinBackground. Это даст ошибку, потому что методы пользовательского интерфейса не могут получить доступ из doInBackground.but, я хочу получить доступ. любой альтернативный процесс существует для доступа к методу пользовательского интерфейса из doinBackground .?

Ответы [ 4 ]

47 голосов
/ 15 марта 2012

существует любой альтернативный процесс для доступа к методу пользовательского интерфейса из doinBackground .?

Звоните publishProgress() в doInBackground(). Поместите вашу логику обновления пользовательского интерфейса в onProgressUpdate() вашего AsyncTask. onProgressUpdate() будет вызываться в главном потоке приложения (a.k.a., поток пользовательского интерфейса) после вызова publishProgress(). Вот пример проекта , демонстрирующий это.

7 голосов
/ 15 марта 2012

Call runOnUiThread (Runnable action)

подробнее здесь

2 голосов
/ 15 августа 2017

Используйте doInBackground() только для задач, которые:

  1. занимают некоторое время
  2. Не связаны с пользовательским интерфейсом

Тогда вы можете реализовать AsyncTask.onPostExecute()запустить код для обработки этих результатов в основном потоке пользовательского интерфейса из AsyncTask

из JavaDoc для AsyncTask.onPostExecute():

"Запускается в потоке пользовательского интерфейса после doInBackground. ..."

1 голос
/ 15 марта 2012

Как уже отмечали другие, вы можете использовать runOnUiThread.Но, кажется немного странным, что вы захотите сделать это в вашем doInBackground.Если вы хотите сообщить пользователю о прогрессе, вам нужно обработать его в AsyncTask.onProgressUpdate и вызвать publishProgress в doInBackground.

Подробнее об AsyncTask можно прочитать здесь: http://developer.android.com/reference/android/os/AsyncTask.html

* Дан 1006 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...