0

작업을 직렬 대기열에서 실행하고 싶습니다 (첫 번째 작업이 두 번째로 시작될 때까지 대기). 동일한 그룹 id를 설정하여 작업을 직렬로 실행할 수있는 안드로이드 우선 순위 대기열 라이브러리를 사용하고 있지만 내 경우에는 작동하지 않습니다.안드로이드 우선 순위 큐에서 직렬로 작업 실행

내가 대기열에

jobManager.addJobInBackground을 세 가지 작업을 추가 한

(새 FetchQuestionsJob (이)); jobManager.addJobInBackground (새 FetchUsersJob (this)); jobManager.addJobInBackground (새 FetchTeamsJob (this));

내 모든 세 가지 작업은이 클래스와 유사하지만 모든 작업이 동시에 실행됩니다. 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 대신 .setGroupId(FETCH_REQUESTS).groupBy(FETCH_REQUESTS)를 사용하는 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

이 문제를 처리 할 수있는 몇 가지 방법이 있습니다. 요청이 순차적으로 실행되어야하는 경우. 당신은 그들을 일자리가 아니라 단지 pojos로 만들 수 있었고 문제의 각 pojos에 대한 동기식 네트워크 요청을 만들 수있었습니다. JobManager는 스레드 풀에 열린 슬롯이 있으면 작업을 병렬로 실행합니다. – kingargyle

답변

0

시도를 구현합니다. 그것은 내 경우에 잘 작동합니다.