私は AsyncTask.THREAD_POOL_EXECUTOR で共通のリクエストとレスポンスを持っています。再試行回数を手動で実装しました。2 つの Web サービスが同時に動作し、互いの再試行回数を使用するとどうなるでしょうか。
クライアント OkHttpClient でレトロフィットを使用しています。
私は AsyncTask.THREAD_POOL_EXECUTOR で共通のリクエストとレスポンスを持っています。再試行回数を手動で実装しました。2 つの Web サービスが同時に動作し、互いの再試行回数を使用するとどうなるでしょうか。
クライアント OkHttpClient でレトロフィットを使用しています。
カスタムコールバックを使用して解決しました(レトロフィットのコールバックをオーバーライドします)。このクラスでは、再試行回数を渡します。そのため、応答の成功または失敗時に、Web サービス固有の変数の再試行回数にアクセスできます。そのため、並列実行の場合に互いに干渉しません。
@POST("/xyz/abc/")
void getSomeData(
@Body TypedInput body,
Callback<Response> callback);
カスタム コールバックを作成して渡し、いくつかの object/int 値を保存して、リクエストを一意に識別することができます。
public interface CustomOnRequestFinishedListener {
void onSuccess(Object response, Response retrofitResponse, Object data);
void onError(RetrofitError error, Object data);
}
CustomCallback を呼び出したい場所に CustomOnRequestFinishedListener を実装し、成功/失敗のコールバックを取得します
public class CustomCallback extends CallBack
{
private final Object data;
private final CustomOnRequestFinishedListener customOnRequestFinishedListener;
public CustomCallback(CustomOnRequestFinishedListener customOnRequestFinishedListener, Object data)
{
this.data = data;
this.customOnRequestFinishedListener = customOnRequestFinishedListener;
}
@Override
public void success(Object o, Response response)
{
customOnRequestFinishedListener.onSuccess(o, response, data);
}
@Override
public void failure(RetrofitError error)
{
customOnRequestFinishedListener.onError(error, data);
}
}
このようにして、最初にリクエストでいくつかの一意のデータを設定し、応答で同じデータを取得します。