android - 有关GcmTaskService的一些问题

标签 android android-5.0-lollipop android-jobscheduler gcmtaskservice

背景

我想使用Lollipop上提供的新JobScheduler API,但遗憾的是它没有Lollipop之前的官方端口。

但是,有GcmTaskService,它提供了非常相似的功能。

问题

这个API是相当新的,因此很少有地方可以查找有关如何使用它的信息(例如herehere)。

问题

我对此新API有一些疑问:

  • 似乎要求使用Google Play服务(here)(使用Android的Lollipop版本时,它将使用常规的JobScheduler除外)。如果无法使用Google Play服务,该怎么办?
  • 看来,即使我对重复的任务使用了“setPersisted(true)”,但是当我重新启动设备时,也不会再次调用该任务。怎么会?
    编辑:那是因为我错过了RECEIVE_BOOT_COMPLETED的许可。
  • 如果我不使用“setRequiredNetwork”,任务的默认行为是什么?是“NETWORK_STATE_ANY”吗?
  • 关于onRunTask返回的内容的docs,我可以返回任何值“RESULT_FAILURE”,“RESULT_RESCHEDULE”,“RESULT_SUCCESS”(信息here)。似乎FAILURE和SUCCESS选项将做同样的事情-从队列中删除任务。是真的吗如果是这样,它们之间到底有什么区别?它们的功能是否有所不同?
  • TaskParams”仅用于任务的标记吗?我可以使用API​​以某种方式将 bundle 包传递给任务吗?否则,我将需要设置一个数据库来存储应该传递给任务的内容,对吗?
  • 应用程序是否有可能获得任务队列?我知道可以使用adb,但是也可以使用API​​吗?
  • 他们说(here)每个任务都有长达3分钟的唤醒时间。如果任务需要的更多,该怎么办?它是否应该自己获得另一个唤醒锁? API是否会警告说唤醒锁已释放?这是文档所说的:

  • The scheduler will hold a PowerManager.WakeLock for your service, however after three minutes of execution if your task has not returned it will be considered to have timed out, and the wakelock will be released. Rescheduling your task at this point will have no effect. If you suspect your task will run longer than this you should start your own service explicitly or use some other mechanism; this API is intended for relatively quick network operations.


  • 他们说(here)每次升级/替换应用程序时,所有网络任务都将被删除,并且在发生这种情况时会调用“onInitializeTasks”,您可以重新安排它们的时间。如何重新安排任务?我想我什至都无法获得任务 list ...
  • 是否可以告诉任务在白天偏爱特定时间?例如,在14:00-15:00之间?
  • 我注意到,如果您安排任务,然后强行停止和/或清除应用程序的数据,该任务仍将运行。如何避免这种行为?
  • 最佳答案

    您可以在此处找到大多数问题的答案。

    https://github.com/jacktech24/gcmnetworkmanager-android-example/blob/master/README.md

    到那里没有答案的答案

    7:移除唤醒锁后,您不会收到通知,正如他们在文档中所说的那样,此API仅用于短期任务,如果您有更长的时间,请编写自己的实现

    9:不,您目前还不能,API不允许

    10:那是因为Google Play服务正在处理它,而且没有办法解决。您必须在服务中检测是否已安装该应用程序(我想这是您的问题),例如。创建配置等,并在其中一项被调用时最终取消所有任务。

    关于android - 有关GcmTaskService的一些问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31426052/

    相关文章:

    Android:编码前在哪里存储大量帧?

    android-jobscheduler - Oppo Realme 1 Job Scheduler 定期工作的最小间隔为 1 小时

    android - 使用 Firebase 作业调度程序运行服务直到下一个计划

    android - Firebase JobDispatcher - 与以前的 API(JobScheduler 和 GcmTaskService)相比,它如何工作?

    android - 使用 Android 5.0 工具栏小部件的 fragment 未显示在 ActionBarActivity 中

    java - 4.4.4 上的 android.view.InflateException 而 5.0 则没问题

    java - 如何通过重写接口(interface)实现Fragment-Activity通信?

    java - 如何将 Activity 实例发送到 dagger2 构造函数中的模块

    android - 找不到引用的类 kotlin.internal.annotations.AvoidUninitializedObjectCopyingCheck

    android - 是否可以更改 Android L TimePickerDialog 的样式?