JobIntentService - получить все запущенные вакансии

Я использую JobIntentService. У меня есть следующий вариант использования, и мне нужна помощь, как я могу его реализовать.

вариант использования:

У меня есть один сервис, отвечающий за загрузку. Теперь, если пользователь нажимает на кнопку загрузки для определенного контента, эта служба запускается и onHandleWork называется, где я загружаю контент синхронно.

Теперь мне нужен способ прервать и / или связаться с этой задачей загрузки. Скажем, например, есть 5 содержимого и пользователь нажимает на кнопку загрузки в следующей последовательности A, B, C, X, D, E и скажем, что контент X очень важен (высокий приоритет) и должен быть загружен первым. Также мне нужно показать уведомление для каждого контента, как только пользователь нажмет на кнопку загрузки.

Так что согласно реализации по умолчанию - onHandleWork() для контента А будет вызываться в первую очередь и только тогда, когда он завершил загрузку, то onHandleWork() за б будет называться и тд.

Я хочу, чтобы, когда пользователь нажимал кнопку загрузки контента X: предположим, что в это время загружался контент B, тогда, поскольку контент X имеет высокий приоритет, загрузка контента B, C будет остановлена, а затем X будет загружен, и как только его закончить, тогда мы можем перейти к D, E, B, C.

Теперь с IntentServiceЯ мог бы сделать это, потому что onStartCommand() был назван, и это не статично. Моя логика была примерно такой:

Но сейчас onStartCommand() не вызывается для устройства oreo +. Так что я могу сделать? Я не могу сделать DownloadTaskService как синглтон.

public class DownloadTaskServiceC extends JobIntentService {

    static final int JOB_ID = 1100;
    private Map<String, DownloadModel> downloadQueue;


    public static void enqueueWork(Context context, Intent work) {
        enqueueWork(context, DownloadTaskServiceC.class, JOB_ID, work);
    }

    private void iterateThroughMyDownloadQueueAndPause(){
        for(DownloadModel model : downloadQueue){
            model.status("pause");
        }
    }

    /**
     * need similar method for JobIntentService
     */
    //@Override
    public int onStartCommand(@Nullable Intent intent, int flags, int startId) {
        LogUtil.d(TAG, "onStartCommand called");

        if(isHighPriorityContent()){
            iterateThroughMyDownloadQueueAndPause();
        }
        downloadQueue.add(currentJobId, model);

        return START_REDELIVER_INTENT;
    }

    @Override
    protected void onHandleWork(@NonNull Intent intent){
        String currentJobId = getJobIdFromIntent();
        DownloadModel model = getModelFromIntent();
        if("pause".equals(model.getStatus())){
            model.setStatus("incomplete");
            //do nothing let onHandleIntent() complete

        }else {
            //continueDownload
        }

        checkDownloadQueueAndRestartIncompleteDownload();
    }

}

0 ответов

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