Это плохая практика для доступа к представлению в doInBackground()?
Это плохая практика, чтобы передать элемент пользовательского интерфейса, такой как TextView
, чтобы AsyncTask.doInBackground()
(через AsyncTask.execute()
) а читать поля из вида в фоновом потоке? (Я знаю, что нельзя изменять элементы GUI из фонового потока.)
1 ответ
Это не очень хорошо, по той простой причине, что вы не знаете, хорош ли этот виджет больше.
Предположим, происходит следующее:
- Вы выполняете
AsyncTask
, но он застрял позади других задач и не запускается сразу - Пользователь поворачивает экран, или нажимает НАЗАД, или иным образом разрушает активность
- Ваш
AsyncTask
наконец запускается, и вы пытаетесь получить доступ к этому виджету
В лучшем случае виджет просто неверен. В худшем случае все, что вы вызываете, вызывает некоторый сбой, потому что хостинг разрушается.
AsyncTask
сам по себе довольно устарел; современная разработка Android использует другие вещи (LiveData
, RxJava, и сопрограммы Kotlin, являющиеся самыми большими кандидатами). Однако, если вы хотите использовать AsyncTask
убедитесь, что он не пытается ссылаться на действие или его виджеты из doInBackground()
,