如何使用新请求更新正在运行的JobService?

时间:2018-10-08 14:35:48

标签: android api android-8.0-oreo android-jobscheduler

我有一个可以下载文件的应用程序。为此,我实现了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创建新请求的情况下继续发布新请求(操作)到正在运行的作业吗? (没有第三方库)

0 个答案:

没有答案