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

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

1 Ответ

2 голосов
/ 10 апреля 2011

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

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

...