2015-09-16 17 views
8

Vor ein paar Tagen, als ich versuchte, Retrofit zu lernen, fand ich einige Tutorials, die sagen, dass wir bei einigen Gelegenheiten ASyncTask zusammen mit Retrofit verwenden sollten. Das verwirrt mich, weil ich den Eindruck hatte, dass wir Retrofit verwenden, um die Verwendung von ASyncTask zu vermeiden. Und jetzt habe ich Retrofit ziemlich gut verstanden (genug, um es zu verwenden und alle meine ASyncTask-Codes zu Retrofit zu ändern), ich habe immer noch keine gute Entschuldigung oder einen Grund gefunden, ASyncTask mit Retrofit zu verwenden. Oder vermisse ich hier etwas?Warum Retrofit mit AsyncTask verwenden?

Btw Ich sah mindestens 3 verschiedene Tutorials, die die Verwendung von Retrofit mit ASyncTask erwähnen, aber ich konnte es nicht mehr finden. Ich konnte nur 1 finden, http://karanbalkar.com/2014/12/tutorial-94-using-retrofit-for-android/

+3

Nachrüstung kann synchron oder asynchron arbeiten. synchrone Verwendung (mit asynctask) ist eine Möglichkeit, Anrufe, die nacheinander ablaufen müssen, einfach zu verketten. (oder Sie könnten Rx dafür verwenden.) – njzk2

+0

@ njzk2, können Sie bitte ein Beispiel für Kettenanrufe bereitstellen? Weil ich das nie gesehen habe ... oder vielleicht habe ich, aber ich habe vielleicht übersehen ... – imin

+0

betrachte 2 Aufrufe, wobei die Argumente für die zweite vom Ergebnis der ersten abhängen. Dazu müssen die Anrufe nacheinander ausgeführt werden. Betrachten Sie nun, wie Sie das mit der Callback-basierten Version Ihrer API-Aufrufe tun würden, und überlegen Sie, wie Sie das unter Verwendung der synchronen Version in einer Asyntask durchführen würden. Sie sollten sehen, dass die asynctask-Version viel schöner ist. Verwenden Sie für zusätzliche Punkte dasselbe mit der Rx-Version des Anrufs. – njzk2

Antwort

7

Das zitierte Turtorial verwendet synchrone Aufrufe. Für synchrone Aufrufe ist es sinnvoll, sie in eine AsyncTask einzutragen.

Da Retrofit jedoch auch asynchrone Aufrufe unterstützt, ist es einfacher, sie direkt ohne AsyncTask zu verwenden.

+0

Ich dachte wirklich, AsyncTask wird nur für asynchrone Aufrufe verwendet, daher der Name AsyncTask. Und aus der Dokumentation hier http://developer.android.com/reference/android/os/AsyncTask.html, die einzige Zeit, die es synonym erwähnt, ist in der Zeile "AsyncTask garantiert, dass alle Callback-Aufrufe so synchronisiert sind, dass die folgende Operationen sind ohne explizite Synchronisationen sicher. " Haben Sie bei den oben erwähnten synchronen Anrufen gemeint, was in der Dokumentation steht? – imin

+0

Nein, der Retrofit-Aufruf selbst ist synchron, dh er blockiert, bis eine Antwort empfangen wird. – Henry

+0

Ich habe das verstanden, aber wir können leicht asynchron umrüsten, indem wir Callback richtig spezifizieren? Mein Kommentar über die Verwendung von ASycnTask für synchrone Anrufe, wie Sie in Ihrer Antwort erwähnt haben. – imin