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

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

Ответы

Ответ 1

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

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

Ответ 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...."