gpt4 book ai didi

android - GCM 网络经理失业

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:14:45 27 4
gpt4 key购买 nike

我正在尝试使用 GCM 网络管理器将日志发送到后端服务。我们有一个大约每小时运行一次的警报,它创建一个 OneoffTask,在执行时,将使用日志消息调用后端服务。

这行得通,但是大量的任务丢失了(超过一半)。起初,我认为这与我们的后端或网络有关,但在添加了大量文件日志记录后,事实证明这些任务永远不会触发服务中的 onRunTask(但它们肯定会被安排。为什么?这些丢失了吗?是我误解了 API,还是 OneoffTasks 根本不可靠?

OneoffTask 是这样安排的:

GcmNetworkManager.getInstance(context).schedule(new OneoffTask.Builder()
.setService(AvroLogService.class)
.setExtras(bundle)

// A mandatory tag which identifies the task
// We add a unique hash to the tag to make sure that
// tasks are logged and not thrown away as dupes.
// See: http://stackoverflow.com/q/34528960/304262
.setTag(java.util.UUID.randomUUID().toString())

// Persist to disk, even across boots:
.setPersisted(true)

// Sets a time frame for the execution of this task in seconds.
// This specifically means that the task can either be
// executed right now, or at latest at a certain point:
.setExecutionWindow(0, TWO_WEEKS_IN_SECONDS)
.build());

同样,这行不通,但只是部分消息。对于随后丢失的消息,上面的代码是绝对 已执行(我添加了文件日志记录来验证这一点),但从来没有为丢失的那些触发相应的 onRunTask。

我已经确认:

  1. list 已根据网络管理器实现指南 (https://developers.google.com/cloud-messaging/network-manager) 更新
  2. AvroLogService(我的服务)扩展了 GcmTaskService
  3. 它覆盖 onRunTask
  4. 该应用具有 RECEIVE_BOOT_COMPLETED 权限。
  5. AvroLogService 不会覆盖 onStartCommand。

我迷路了。有人可以分享这方面的见解吗?

最佳答案

如上答案,执行时间范围可能太大。另外我认为你想要定期执行事件尝试使用 PeriodicTask.Builder 而不是 OneoffTask.Builder

关于android - GCM 网络经理失业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41703983/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com