2015-09-16 3 views
8

Несколько дней назад, когда я попытался изучить, как использовать Retrofit, я нашел несколько руководств, в которых говорится о некоторых случаях, мы должны использовать ASyncTask вместе с Retrofit. Это меня озадачивает, потому что я думал, что мы используем Retrofit, чтобы избежать использования ASyncTask. И теперь я понял Retrofit достаточно хорошо (достаточно, чтобы использовать его и изменить все мои коды ASyncTask для Retrofit), я до сих пор не нашел хорошего оправдания или причины использовать ASyncTask с помощью Retrofit. Или я ничего не теряю здесь?Зачем использовать Retrofit с AsyncTask?

Btw Я видел как минимум 3 разных учебника, которые упоминаются при использовании Retrofit с ASyncTask, но я больше не мог его найти. Я могу найти только 1, http://karanbalkar.com/2014/12/tutorial-94-using-retrofit-for-android/

+3

Модификация может работать синхронно или асинхронно. использование его синхронно (с использованием асинтез) - это способ легко цепочки вызовов, которые должны выполняться последовательно. (или вы можете использовать Rx для этого.) – njzk2

+0

@ njzk2, можете ли вы предоставить образец цепочки звонков? Потому что я никогда не видел этого ... или, может быть, у меня есть, но я, возможно, пропустил ... – imin

+0

рассмотрим 2 вызова, где аргументы второй зависят от результата из первого. Это требует, чтобы эти вызовы выполнялись один за другим. Теперь рассмотрите, как вы это сделаете, используя обратные вызовы на основе api и рассмотрите, как вы это сделаете, используя синхронную версию в асинтете. Вы должны увидеть, что асинхронная версия намного приятнее. Для дополнительных точек выполните то же самое, используя Rx-версию вызова. – njzk2

ответ

7

Приведенный turtorial использует синхронные звонки. Для синхронных вызовов имеет смысл разместить их в AsyncTask.

Однако, поскольку Retrofit также поддерживает асинхронные вызовы, их проще использовать напрямую без AsyncTask.

+0

Я действительно думал, что AsyncTask используется только для асинхронных вызовов, отсюда и имя AsyncTask. И из документации здесь http://developer.android.com/reference/android/os/AsyncTask.html, единственный раз, когда он упоминает синхронно, находится в строке «AsyncTask» гарантирует, что все вызовы обратного вызова синхронизированы таким образом, что следующие операции безопасны без явных синхронизаций ». По синхронным звонкам, о которых вы говорили выше, действительно ли это означало, что говорит документация? – imin

+0

Нет, сам модифицированный вызов является синхронным, то есть он блокируется до получения ответа. – Henry

+0

Я понял это, но мы можем легко сделать асинхронную модификацию, указав обратный вызов правильно? Мой комментарий выше об использовании ASycnTask для синхронных вызовов, как вы упомянули в своем ответе. – imin

Смежные вопросы