Как обновить запущенный JobService новым запросом? - PullRequest
0 голосов
/ 08 октября 2018

У меня есть приложение с возможностью загрузки файлов.Для этой цели я реализовал DownloadService, который сначала выполняет запрос к базе данных для получения кандидатов на загрузку, а затем создает очередь для загрузки.Как только очередь построена, она начнет обрабатывать загрузки 1 на 1, пока очередь не станет пустой, а затем завершит свою работу.Во время работы службы пользователь может добавлять дополнительные запросы на загрузку (отправьте ACTION действующей службе, чтобы перестроить очередь).Но мы не можем больше использовать фоновый сервис при нацеливании на Oreo или более новую версию Android, и я хотел бы избежать его использования в качестве службы переднего плана, чтобы не отображать уведомление при определении очереди загрузки и не выполнять фактическую загрузку файла.

Я пытался schedule использовать setOverrideDeadline(0), используя JobScheduler API, но вместо обновления запущенного задания старое было уничтожено, а новое создано.Я также попытался enqueue JobWorkItem вместо этого, но onStartJob из JobService (где я должен удалить работу из очереди) не вызывается, если задание уже выполняется, поэтому я не могу обновить его новыми запросами.

РЕДАКТИРОВАТЬ 1: У меня есть экспериментальная реализация, в которой я буду проверять, работает ли мой JobService, используя этот пример кода

private boolean isServiceRunning() {
    ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
    for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)){
        if("com.example.MyJobService".equals(service.service.getClassName())) {
            return true;
        }
    }
    return false;
}

Если задание не выполняется, я планирую его, но если оно выполняется, яотправит событие на это задание с помощью EventBus и обновит задание новым запросом.Но я бы предпочел «чистое» решение API JobScheduler.

РЕДАКТИРОВАТЬ 2: У меня также есть возможность загружать несколько файлов параллельно и изменять приоритет загрузок в очереди.

Кто-нибудь знает, как сохранитьотправлять новые запросы (действия) в запущенное задание без создания нового с JobScheduler API?(без сторонних библиотек)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...