兼容的Android JobScheduler版本 - 替代方案

15

有没有任何库或至少一些开源示例,提供新的Android-L JobScheduler API的功能。实现自己的版本并不难(具有非常有限的功能),但另一方面也不是微不足道的。

所以总而言之,是否有任何东西可以提供新的JobScheduler API的功能子集?

4个回答

9

只需使用GCM网络管理器。它提供了调度任务的API。它适用于API级别低于21的设备。在API级别21+的设备上,它内部使用作业调度程序。


1
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - LarsH

7
你可以自己尝试一些方法,但是很遗憾,应用程序本身无法实现与许多作业调度API相当的功能。问题在于监视作业调度器提供的几个执行标准(特别是充电状态、设备空闲和连接)需要您的应用程序持续运行才能接收有关这些状态的广播--即使您的应用程序是唯一在运行的,持续运行的性能成本也会超过其他好处。如果每个应用程序都试图持续运行以进行相同类型的监视,用户体验将非常糟糕。
你最接近的方式是通过自己运行服务“偶尔”检查你感兴趣的约束条件,并在检查时不符合条件就回退并稍后重试。你还需要小心如何安排事情--特别是,如果你将使用网络,你需要非常小心,以确保你不会意外地导致大量设备同时访问网络。如果他们看到来自你的应用程序的每个设备的同时流量,无线电运营商会非常不高兴。此外,请记住尽可能避免精确警报,以便操作系统有余地将您的应用程序的工作与其他人的工作批处理在一起。
很遗憾,设备空闲/用户活动对于您的应用程序来说非常难以跟踪,但连接和充电状态是很容易获取的。
最后一个可用的工具是同步管理器,需要更多基础设施来使用,但确实提供了一些相当强大的调度功能,特别是在连接要求方面。

6
我知道JobScheduler将在Android L中推出,它在操作系统级别运行,比我能想到的其他任何解决方案更有效。问题是我想使用新的API在新平台上使我的应用更加高效,但同时我需要在旧设备上保持相同的行为,尽管这不如JobService本身好。如果存在某种兼容性库,则可以实现这一点;否则,在不久的将来我将不会转换到JobScheduler。 - Gordon Freeman
2
正如@nouman-hanif在下面提到的那样,Google Play服务套件中的GCM网络管理设施为历史版本的Android提供了类似于JobScheduler的语义,并在最新版本上直接使用JobScheduler。 - ctate
你能详细说明一下你所说的“同步管理器”是什么吗?你有链接吗?网络搜索返回了许多不同的“同步管理器”结果。 - LarsH
“同步管理器”是负责运行您的应用程序同步适配器等系统实体。尽管如此,我在文档中并没有看到它真正被称为这个名字 - 对此我感到抱歉。我建议您从Android中关于“同步适配器”的基本文档开始,并从那里继续:http://developer.android.com/training/sync-adapters/index.html - ctate

5

非常感谢!我会尝试一下。 - Gordon Freeman
5
@GordonFreeman,你试过了吗?稳定吗?与原来的L JobScheduler有多接近? - surlac
3
请注意,除非您处于极为罕见的无法使用情况,否则GcmNetworkManager是官方向后兼容API。您使用的任何其他内容(以库的形式包含在应用中)都会是一个远远不如JobScheduler的解决方案 - 您无法编写一个等效的解决方案,而无需持续(几乎)运行进程,并且您希望该进程在Google Play服务中而不是您自己的应用程序中运行并浪费用户的RAM。 - hackbod
@hackbod,这就是为什么谷歌服务在我所有设备上会耗费50-90%的电池电量的原因;) 尽管服务在设备上不可用,但我仍然更喜欢AlarmManager,因为它可以正常工作。 - deviant

2
截至2015年11月,这个名为https://github.com/evant/JobSchedulerCompat的库提到它没有得到积极维护。

警告:该项目未得到维护!

这里有一个名为Trigger https://github.com/airk000/Trigger 的库,它也声称是JobScheduler服务的后移植版本,并具有以下特点:
  1. 支持多个条件组合一个任务
  2. 内部条件:设备充电、非计量网络和空闲状态
  3. 支持持久性任务,意味着在设备重新启动后可以触发可持久化的任务
  4. 支持任务的最后期限,即最后触发的机会
  5. 允许您的任务操作在后台或主线程中运行,根据您的配置

为了节省时间:触发器需要API级别14+。 - LarsH

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接