У меня есть приложение с возможностью загрузки файлов.Для этой цели я реализовал 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?(без сторонних библиотек)