2015-11-14 35 views
11

私はアンドロイドRESTクライアントにRetrofit 2ライブラリを使用しています。 Retrofit自体は、同期と非同期の要求(here参照)をサポートしています。後者はスレッドをブロックしないため、アンドロイドによって中断されないためです。androroidのベストプラクティス2:AsyncTaskの非同期要求または同期要求?

実際には、ネイティブAsyncTaskの同期呼び出し、またはRetrofitからの直接の非同期呼び出しを使用する方が良いですか? 一方が他方よりも好ましい場合、技術的な理由は何ですか?

答えて

20

人気のあるRESTクライアント(retrofit、volleyなど)のを使用する主な理由の1つは、アプリケーション層で管理している詳細の量を減らすことです。これらの詳細の1つは、ネットワーク要求がメインスレッドから確実に行われるようにすることです。他の機能用に既に使用しているライブラリで、同じ機能を提供するときに、より少ないセレモニーで、なぜAsyncTaskを使用するのですか?私が考えることができる唯一の理由は、あなたがライブラリのスレッディングがとても良いとは思わないということです。この問題は改造2には当てはまりませんが、OkHttpを使用して非同期呼び出しをディスパッチします。 OkHttpはしばらくの間使用されており、広範囲に使用されています。非同期要求を実行するために独自のスレッドプールを管理しています。

したがって、retrofit asyncを使用することのメリットは、より洗練されたコードであり、私には改造同期呼び出しのvs AsyncTaskの欠点はありません。私が同期呼び出しを使用する唯一の時間は、コードが別の理由でバックグラウンドスレッドですでに実行されている場合です。ネットワークコールのためだけに別のスレッドまたはasynctaskを作成せず、enqueueを代わりに使用します。

関連する問題