0

ジョブをシリアルキューで実行したい(最初のジョブが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) { 

} 
+0

これを処理するにはいくつかの方法があります。それらのリクエストが順番に実行される必要がある場合。それらを仕事にするのではなく、単にポーズにすることはできませんでした。問題のポーホーズごとに同期ネットワーク要求を行います。ジョブマネージャは、スレッドプール上に開いているスロットがあれば、ジョブを並列に実行します。 – kingargyle

答えて

0

を実装は、.groupBy(FETCH_REQUESTS)代わりに.setGroupId(FETCH_REQUESTS)を使用してみてください。私の場合はうまく動作します。

関連する問題