当前位置:  开发笔记 > Android > 正文

GCM Network Manager失去了工作

如何解决《GCMNetworkManager失去了工作》经验,为你挑选了0个好方法。

我正在尝试使用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.

我已经证实:

    根据"网络管理器实施指南"(https://developers.google.com/cloud-messaging/network-manager)更新清单

    AvroLogService(我的服务)扩展了GcmTaskService

    它覆盖onRunTask

    该应用具有RECEIVE_BOOT_COMPLETED权限.

    AvroLogService不会覆盖onStartCommand.

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

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