ジョブをシリアルキューで実行したい(最初のジョブが2番目に開始するのを待つ)。私は同じグループのIDを設定してシリアルでジョブを実行することができますが、私の場合は動作しないアンドロイド優先順位キューライブラリを使用しています。アンドロイド優先キューのシリアルでジョブを実行する
私は
キューにjobManager.addJobInBackground(新FetchQuestionsJob(これを))3つのジョブが追加されました。 jobManager.addJobInBackground(新しいFetchUsersJob(this)); jobManager.addJobInBackground(新しいFetchTeamsJob(this));
私は3つすべてのジョブがこのクラスに似ていますが、すべてのジョブが同時に実行されます。私はFetchQuestionsJobよりも早くFetchUsersJob/FetchTeamsJobから応答を受け取ります。
public class FetchQuestionsJob extends Job{
Context context;
public FetchQuestionsJob(Context context){
super(new Params(9).requireNetwork().setGroupId(FETCH_REQUESTS));
this.context = context;
}
@Override
public void onAdded() {
}
@Override
public void onRun() throws Throwable {
new FetchQuestionsApi(context);
}
@Override
protected void onCancel(int cancelReason, @Nullable Throwable throwable) {
}
@Override
protected RetryConstraint shouldReRunOnThrowable(@NonNull Throwable throwable, int runCount, int maxRunCount) {
return null;
}
FetchQuestionApi
パブリッククラスFetchQuestionsApiがIDataReceiveListener {
VolleyNetworkController networkController;
Context context;
Realm realm;
public FetchQuestionsApi(Context context) {
this.context = context;
networkController = new VolleyNetworkController(context);
networkController.getRequest(URL_GET_QUESTIONS, null, null, this);
}
@Override
public void onDataReceived(JSONObject jsonObject) {
try {
if (jsonObject.getBoolean(RESPONSE_SUCCESS)) {
JSONArray data = jsonObject.getJSONArray("Data");
Gson gson = new Gson();
Question[] question = gson.fromJson(data.toString(), Question[].class);
realm = Realm.getDefaultInstance();
realm.beginTransaction();
realm.copyToRealmOrUpdate(Arrays.asList(question));
realm.commitTransaction();
Question specificCountry = realm.where(Question.class).findFirst();
String id = specificCountry.getId();
Log.d("", jsonObject.toString());
AppController.getInstance().getJobManager().addJobInBackground(new FetchUsersJob(context));
}
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void OnError(String message) {
}
これを処理するにはいくつかの方法があります。それらのリクエストが順番に実行される必要がある場合。それらを仕事にするのではなく、単にポーズにすることはできませんでした。問題のポーホーズごとに同期ネットワーク要求を行います。ジョブマネージャは、スレッドプール上に開いているスロットがあれば、ジョブを並列に実行します。 – kingargyle