【问题标题】:Retrieve current list of active jobs in android-priority-jobqueue在 android-priority-jobqueue 中检索当前活动作业列表
【发布时间】:2016-03-26 14:19:29
【问题描述】:

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

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

【问题讨论】:

    标签: java android priority-queue job-queue android-priority-jobqueue


    【解决方案1】:

    我们不提供这样的 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

    【讨论】:

    • 谢谢 Yigit。我明白了,别担心,我有一些仍然可以使用的替代解决方案。
    • PS 我刚起床,但出于好奇,如果您允许检查工作,您能否提供一个典型的竞争条件场景示例?
    猜你喜欢
    • 1970-01-01
    • 2017-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-15
    • 2021-07-20
    • 2014-08-22
    相关资源
    最近更新 更多