【问题标题】:Clarification of setUpdateCurrent on OneOffTask澄清 OneOffTask 上的 setUpdateCurrent
【发布时间】:2015-12-30 11:46:06
【问题描述】:

我正试图围绕 GcmNetworkManager 工具中 OneoffTask 的 setTag 和 setUpdateCurrent 的行为。
The documentation of setUpdateCurrent 说:

可选设置器,用于指定此任务是否应覆盖具有相同标记的任何预先存在的任务。这默认为 false,这意味着新任务不会覆盖现有任务。

很公平,但它并没有说明任务会发生什么,它只说明了一件不会发生的事情 - 即任务不会被覆盖。 :) 我不清楚使用 setUpdateCurrent 是否意味着允许重复任务是否意味着它们被丢弃?

说清楚,我的问题是这样的: 鉴于您使用了 setUpdateCurrent(false),当您创建一个与另一个已计划的 OneoffTask 具有相同标签的 OneoffTask 时,新任务是否仍然除了已经安排好的任务之外,还会发生新的任务,还是会丢弃新任务,将其视为重复任务?

【问题讨论】:

    标签: android google-cloud-messaging android-service android-jobscheduler


    【解决方案1】:

    鉴于您使用 setUpdateCurrent(false),当您创建一个 OneoffTask 与另一个已经存在的 OneoffTask 具有相同的标签 已安排,新任务是否还会发生 计划一个,或者新任务会被丢弃,被解雇为 重复?

    新任务被丢弃并且永远不会被安排。我对此感到惊讶,并且绝对认为文档应该如此说明。

    事实证明,您可以使用以下命令自行测试:

    adb shell dumpsys activity service GcmService --endpoints YourGcmTaskServiceClassName
    

    这使您可以查看您有多少待处理的任务。在您的代码中调用 GcmNetworkManager.getInstance(this).schedule(task) 之后,您的包的任务数将在 adb 命令的输出中立即增加:

    Tasks count by package:
    com.mypackage: 1
    

    在其下方是显示待处理任务的区域:

    Pending:
    
    (scheduled) endpoint='com.mypackage/com.mypackage.YourGcmTaskServiceClassName'
    tag='testing' : [PENDING] u0
    Next execution: [early=17s, expires=37s]
    Not yet run.
    

    现在,如果您尝试使用 setUpdateCurrent(false) 安排另一个任务,并且与当前待处理的任务具有相同的标记,您会注意到下次运行 adb 命令时只有一个任务仍然待处理,这是您的第一个任务预定。

    如果您指定setUpdateCurrent(true),一个任务也会保持计划状态,但正如预期的那样,它将是新任务。

    最后,如果您指定具有不同标签的任务并安排它们,任务计数将变为两个,并且两个任务都将处于挂起状态,这也是预期的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-30
      • 2020-04-02
      • 2019-11-15
      • 2013-06-05
      • 2013-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多