当前位置:  开发笔记 > 编程语言 > 正文

澄清OneOffTask上的setUpdateCurrent

如何解决《澄清OneOffTask上的setUpdateCurrent》经验,为你挑选了1个好方法。

我试图围绕GcmNetworkManager工具中的setTag和OneoffTask的setUpdateCurrent的行为.
setUpdateCurrent的文档说明了这一点:

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

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

为了清楚起见,我的问题是:假设您使用了setUpdateCurrent(false),当您创建一个OneoffTask,其标签与已经安排的另一个OneoffTask相同时,除了已经安排的任务之外,新任务是否仍会发生,或者新任务是否会被抛弃,被视为重复?



1> George Mulli..:

鉴于您使用了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)一个任务也保持计划,但正如预期的那样,它将是新任务.

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

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有