Это плохая практика для доступа к представлению в doInBackground ()? - PullRequest
0 голосов
/ 04 мая 2019

Неправильно ли передавать элементы пользовательского интерфейса, такие как TextView, AsyncTask.doInBackground() (через AsyncTask.execute()) и читать поля из представления вфоновый поток?(Я знаю, что нельзя изменять элементы графического интерфейса из фонового потока.)

1 Ответ

3 голосов
/ 04 мая 2019

Это не здорово, по той простой причине, что вы не знаете, хорош ли этот виджет больше.

Предположим, происходит следующее:

  • Вы выполняете AsyncTask, но он застрял за другими задачами и не запускается сразу
  • Пользователь поворачивает экран, нажимает НАЗАД или иным образом уничтожает действие
  • Ваш AsyncTask наконец-то начинает работать ивы пытаетесь получить доступ к этому виджету

В лучшем случае виджет просто неверен.В худшем случае все, что вы вызываете, вызывает какой-то сбой, потому что хостинг разрушается.

AsyncTask сам по себе довольно устарел;В современной разработке для Android используются другие вещи (наиболее подходящими кандидатами являются сопрограммы LiveData, RxJava и Kotlin).Однако, если вы хотите использовать AsyncTask, убедитесь, что он не пытается ссылаться на действие или его виджеты из doInBackground().

...