Запускать задания в сериале в очереди приоритетов Android

Я хочу запускать задания в последовательной очереди (дождаться, пока первое задание начнется вторым). Я использую библиотеку очередей с приоритетами Android, которая позволяет вам запускать задания последовательно, устанавливая один и тот же идентификатор группы, но в моем случае это не работает.

Я добавил три работы в очереди

jobManager.addJobInBackground (new FetchQuestionsJob (this)); jobManager.addJobInBackground (new FetchUsersJob (this)); jobManager.addJobInBackground (new FetchTeamsJob (this));

Все мои три задания похожи на этот класс, но все задания выполняются одновременно. Я получаю ответ от FetchUsersJob / FetchTeamsJob раньше, чем FetchQuestionsJob.

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) {

}

1 ответ

Попробуй использовать .groupBy(FETCH_REQUESTS) вместо .setGroupId(FETCH_REQUESTS), Это прекрасно работает в моем случае.

Другие вопросы по тегам