Когда AsyncTask работает в фоновом режиме? - PullRequest
0 голосов
/ 25 апреля 2018

Поэтому, пожалуйста, извините за вопрос новичка ...

У меня есть AsyncTask:

class DownloadWeather extends AsyncTask<String, Void, String>{

}

Но я заметил, что есть 2 способа получить из него информацию ..а именно используя onPostExecute:

@Override
protected void onPostExecute(String s) {
    super.onPostExecute(s);
}

или просто вызывая его так из mainActivity:

json = downloadWeather.execute(url).get();

Насколько я могу судить, вся цель AsyncTask состоит в том, чтобы удержать пользователяинтерфейс интерактивный ... Но разве использование второй опции в классе MainActivity приведет к потере кадров UI?Если это так, то почему вообще существует второй вариант?

В этой же заметке ... существует ли простой способ вызвать функцию, расположенную в классе MainActivity, из метода onPostExecute?

1 Ответ

0 голосов
/ 25 апреля 2018

Но не приведет ли использование второго параметра в классе MainActivity к потере кадров пользовательского интерфейса?Если это так, то почему вообще существует второй вариант?

Хотя основная цель AsyncTask состоит в том, чтобы упростить правильное и простое использование потока пользовательского интерфейса и выполнять фоновые операции, могут быть некоторые случаи использования, когдаget() можно использовать.

Поскольку ответ на этот вопрос может быть немного произвольным, вы можете не согласиться с моим ответом, но в некоторых случаях использования get() может быть следующим:

  • Возможен случай, когда вы захотите использовать AsyscTask в качестве отдельной задачи или пакета с некоторыми другими задачами. Рассмотрим сценарий, в котором вам необходимо загрузить некоторые данные на основе идентификаторов.API для идентификаторов и данных разные. То есть вам нужно использовать один API для загрузки идентификаторов и один API для загрузки данных.Вы можете создать оболочку, которая будет использовать IdDownloadTask.get() и DataDownloadtask.get() для обеспечения последовательной загрузки.В случае если идентификаторы доступны, вы можете напрямую использовать DataDownloadTask.execute().

  • . Вы также можете использовать get() в наборе тестов, чтобы создать тест для профилирования времени прохождения туда-обратнос помощью вашего веб-API.

  • Возможна ситуация с многопоточностью, в которой вывод AsyncTask необходим для продолжения выполнения этого потока.

Существует несколько других API, предоставляемых Android, которые используются редко, но кому-то с особым запросом они могут понадобитьсяЯ чувствую, что Google должен быть многословным, чтобы удовлетворить потребности разработчиков, поскольку модификация для нескольких простых вариантов использования может быть дорогой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...