2

私は OkHttp ライブラリにあまり詳しくなく、非同期リクエストにどのように使用するべきかについて疑問があります。

Android プログラミングでは、http用に Android ライブラリを使用し、リクエストにはasyncTaskを使用していました。

しかし、私は OkHttp ライブラリを試してみたかったので、正しい使用方法についていくつかの「問題」に直面しました。

例:

OkHttp を使用して非同期リクエストを実装するとします。OkHttp には独自の非同期 API ( https://github.com/square/okhttp/blob/master/samples/guide/src/main/java/okhttp3/recipes/AsynchronousGet.java ) があることを読みました。

しかし、その後、この投稿 ( Square`s OkHttp. Download progress ) に出くわしました。この投稿では、男が「古い」asyncTask を使用していましたが、OkHttp 要求を使用していました (他のフォーラムで、AsyncTask を OkHttp で使用していることもわかりました)。

これは、POST にも適用できる次のコードで簡単に作成できるため、少し混乱します。

OkHttpClient client = new OkHttpClient();
// GET request
Request request = new Request.Builder()
        .url("http://google.com")
        .build();
client.newCall(request).enqueue(new Callback() {
    @Override
    public void onFailure(Request request, IOException e) {
        Log.e(LOG_TAG, e.toString());
    }

    @Override
    public void onResponse(Response response) throws IOException {
        Log.w(LOG_TAG, response.body().string());
        Log.i(LOG_TAG, response.toString());
    }
});

質問:

  1. OkHttpで非同期リクエストを使用する正しい方法は何ですか?
  2. OkHTTPでAsyncTaskを使用するのは良い習慣ですか?
  3. OkHttp非同期APIを使用する代わりに、どのような場合にOkHttpでAsyncTaskを使用する必要がありますか?
4

1 に答える 1

1

私は両方のアプローチを試しましたが、どちらも私のニーズに合っています。これは、状況と、本当に必要なものによって異なります。asynctask バージョンはより良く、より簡単に見えますが、他のバージョン (レトロフィットで行う場合) は、より多くの機能を提供します。

たとえば、asyncTask では、ネットワーク呼び出しをキャンセルする可能性はありません。これは、レトロフィット (このソリューションで試したレトロフィットの原因を参照) で簡単に行うことができます。

レトロフィットがどのように機能するかをよりよく理解するための良いリンクを次に示します。

https://futurestud.io/blog/retrofit-2-upgrade-guide-from-1-9

http://instructure.github.io/blog/2013/12/09/volley-vs-retrofit/

また、AsyncTask は実際には同期呼び出しです (これも AsyncTask のバージョンによって異なります)。したがって、非同期呼び出しの場合は、他のアプローチを使用する必要があります。

于 2016-03-05T18:30:57.667 に答える