1

我想知道是否有推荐的方法来检索https://github.com/yigit/android-priority-jobqueue中的活动作业列表

这样一来,如果我还有持久性工作仍在等待,我可以让用户知道哪些工作。

4

1 回答 1

6

我们不提供这样的 API,因为它可能导致误用。例如,检查作业是否存在以决定是否添加(因为这是竞争条件的配方)。

如果您真的需要这个,您可以覆盖持久队列并提供您自己的队列,您可以在其中跟踪作业添加/删除。有关详细信息,请参阅 JobManager 配置 WIKI:

https://github.com/yigit/android-priority-jobqueue/wiki/Job-Manager-Configuration

编辑:一个示例竞争条件

有人可能会写这样的代码:

if (!jobManager.hasJobOfType(ImportantJob.class)) {
    jobManager.addJob(new ImportantJob());
} else {
    // it is already added, no need to re add
}

这里有一个潜在的竞争条件,hasJobOfType返回 true 但同时 Job 即将被取消。现在,没有要运行的作业:/。另一个竞争条件是,代码可能已在其他地方调用addJobInBackground,因此它将被添加,但在hasJobOfType调用时尚未添加。

这种情况的最佳解决方案是onCancel 在 onRun 方法中重新创建另一个作业或手动处理先前作业的取消(使用全局计数器等)。另一种选择是使用cancelAsync带有回调版本的方法。

http://yigit.github.io/android-priority-jobqueue/javadoc/index.html

于 2015-12-21T01:10:18.567 回答