在 android-priority-jobqueue 中检索当前活动作业列表
Retrieve current list of active jobs in android-priority-jobqueue
我想知道是否有推荐的方法来检索 https://github.com/yigit/android-priority-jobqueue
中的活动工作列表
这样一来,如果我有持久性作业仍在等待,我可以让用户知道是哪些。
我们不提供这样的 API,因为它可能会导致误用。例如检查作业是否存在以决定是否添加(因为这是竞争条件的秘诀)。
如果您真的需要这个,您可以覆盖持久队列并提供您自己的队列,您可以在其中跟踪作业 additions/removals。详情见 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
returns 为真,但同时作业即将被取消。现在,运行 没有工作:/。
另一个竞争条件是,代码可能在其他地方调用了 addJobInBackground
,因此将添加它,但在调用 hasJobOfType
时尚未添加。
这种情况的最佳解决方案是在 onCancel
中重新创建另一个作业或在 onRun 方法(使用全局计数器等)中手动处理先前作业的取消。
另一种选择是使用 cancelAsync
方法及其回调版本。
http://yigit.github.io/android-priority-jobqueue/javadoc/index.html
我想知道是否有推荐的方法来检索 https://github.com/yigit/android-priority-jobqueue
中的活动工作列表这样一来,如果我有持久性作业仍在等待,我可以让用户知道是哪些。
我们不提供这样的 API,因为它可能会导致误用。例如检查作业是否存在以决定是否添加(因为这是竞争条件的秘诀)。
如果您真的需要这个,您可以覆盖持久队列并提供您自己的队列,您可以在其中跟踪作业 additions/removals。详情见 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
returns 为真,但同时作业即将被取消。现在,运行 没有工作:/。
另一个竞争条件是,代码可能在其他地方调用了 addJobInBackground
,因此将添加它,但在调用 hasJobOfType
时尚未添加。
这种情况的最佳解决方案是在 onCancel
中重新创建另一个作业或在 onRun 方法(使用全局计数器等)中手动处理先前作业的取消。
另一种选择是使用 cancelAsync
方法及其回调版本。
http://yigit.github.io/android-priority-jobqueue/javadoc/index.html