我有一个可以下载文件的应用程序。为此,我实现了DownloadService,它将首先进行数据库查询以获取下载候选者,然后建立下载队列。队列建立后,它将开始按1的顺序处理下载,直到队列为空,然后自行完成。服务运行时,用户可以添加更多下载请求(将ACTION发送到正在运行的服务以重新构建队列)。 但是我们can't use background service不再以Oreo或更高版本的Android为目标时,我想避免将其实现为前台服务,以避免在确定下载队列而不进行实际文件下载时显示通知。
我尝试使用schedule
API和setOverrideDeadline(0)
来JobScheduler
,但是没有更新正在运行的作业,而是销毁了旧作业,并创建了新作业。我也尝试过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向该作业发送事件,并使用新请求更新作业。但是我更喜欢“纯粹”的JobScheduler的API解决方案。
编辑2:我还可以选择并行下载多个文件并更改排队下载的优先级。
有人知道如何在不使用JobScheduler
API创建新请求的情况下继续发布新请求(操作)到正在运行的作业吗? (没有第三方库)