ОК, чтобы прочитать значения в потоке пользовательского интерфейса из AsyncTask.doInBackground ()

1

В Android, нормально ли читать значения, существующие в потоке пользовательского интерфейса (например, поля элемента подкласса Activity), из AsyncTask.doInBackground(), просто не пытайтесь их записать? Или чтение должно выполняться только в AsyncTask.onPostExecute()?

Теги:
multithreading
thread-safety
android-asynctask

1 ответ

2
Лучший ответ

В идеале вы не касаетесь действия в doInBackground() AsyncTask. Причина: изменение конфигурации (например, поворот экрана). Активность может быть заменена, пока поток прерывается, и поэтому вы можете завершить чтение из-за неправильного действия.

Если вы следуете рецепту, который я описываю в этом ответе на протяжении, и вы синхронизируете доступ к Activity, удерживаемому AsyncTask, вы будете получить как можно больше результатов. Разумеется, вам также придется иметь дело с безопасностью потоков независимо от того, что вы читаете ( "например, полями подкласса Activity" ), поскольку они могут быть или не быть потокобезопасными уже.

  • 0
    Благодарю. Применимы ли те же рассуждения к onPostExecute() ?
  • 1
    @Julian: Нет, потому что onPostExecute() вызывается в главном потоке приложения. И, если вы будете следовать рецепту, с которым я связан выше, экземпляр действия в задаче будет правильным ко времени выполнения onPostExecute() .
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню