Это плохая практика для доступа к представлению в doInBackground()?

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

1 ответ

Решение

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

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

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

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

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

Другие вопросы по тегам