我需要安排一个每24小时运行一次的任务,以便从远程服务器获取一些小数据。 GcmNetworkManager 似乎是一个完美的候选人,因为我需要支持sdk 15+。 (JobScheduler只有21岁以上)。
我通过扩展应用程序实现这一目标的方式。 onCreate ,我创建了一个带有特定标记的PeriodicTask,我调用 .setUpdateCurrent(false)(因此,第一个被调度,后续任务应该被忽略,因为它们不应该更新现有的任务)。
在我阅读的文档中
重要提示:更新Google Play服务或客户端应用后,系统会删除所有计划任务。 GcmNetworkManager调用客户端应用程序的onInitializeTasks()。重写此功能以重新安排必要的任务。
在我的场景中,它应该与应用程序的onCreate无关,我总是在创建更新任务。有没有比我做的更好的方式? (我希望有一种方法可以检查是否存在具有给定标记的待定周期任务)
答案 0 :(得分:4)
除非您正在BroadcastReceiver
中聆听ACTION_MY_PACKAGE_REPLACED(并在此处安排任务),否则仍应覆盖onInitializeTasks()
以创建相同的PeriodicTask
。否则,Google Play商店更新您的应用的时间与您没有安排定期任务的用户手动运行该应用之间可能需要一段时间。