OKHttpは 同期および非同期API の両方をサポートします。非同期リクエストを発行したい場合は、次のことができます。
これら2つのオプションの違いは何ですか?そしてどちらが良いですか?
かなり違います!
HTTPリクエストにAsyncTask
を使用することは、Androidで実行できる最も悪いことの1つです。無条件に回避するのが最善の問題と落とし穴が山積しています。たとえば、実行中にリクエストをキャンセルすることはできません。 AsyncTask
を使用するパターンでは、Activity
、Android development。
OkHttpの非同期は、多くの理由で非常に優れています。
Callback
への参照は解放され、呼び出されることはありません。また、リクエストがまだ開始されていない場合は、実行されません。 HTTP/2またはSPDYを使用している場合は、実際にリクエストの途中で帯域幅と電力を節約することができます。Activity
で行うすべてのリクエストは、Activity
インスタンスでタグ付けできます。次に、onPause
またはonStop
で、Activity
インスタンスでタグ付けされたすべてのリクエストをキャンセルできます。Call
メカニズムを使用することで、ブロッキングバージョンよりもはるかに効率的です。したがって、可能であればCall.enqueue
!
何もない。 OKHttp非同期は、OKHttp API駆動です。したがって、すべてのプラットフォームでjarファイルをバンドルする限り、問題はありません。 AsyncTaskはAndroid=物事を行う方法です。
ただし、Honeycomb Asyncタスクはタスクを並列ではなく順次実行します。つまり、AsyncTaskの実行メソッドは、UIスレッドからジョブを実行する新しいスレッドにまたがっていますが、1つのAsyncTaskに送信されたすべてのタスクは同じスパンされたスレッドで実行されます。
したがって、送信された3つのタスクについて、3つのスレッドを取得しないでください。それらはすべて、単一のスパンされたスレッドで順次実行されます。 OKHttpを使用すると、コールバックと非同期のGETおよびPOSTを使用して真の並列処理を実現できます。
AsyncTaskメソッドで真の並列処理を行うこともできますが(AsyncTaskでオーバーロードされた実行メソッドを確認してください)、デフォルトのAndroidの動作はそうではありません。