【发布时间】:2017-06-07 13:58:19
【问题描述】:
根据documentation,每个 uid 的作业必须有一个唯一的作业 ID。
如果我使用也安排作业的第 3 方库,这是否意味着我不能使用与他们相同的作业 ID?如果是这样,我怎样才能避免这种碰撞?
【问题讨论】:
标签: android android-jobscheduler
根据documentation,每个 uid 的作业必须有一个唯一的作业 ID。
如果我使用也安排作业的第 3 方库,这是否意味着我不能使用与他们相同的作业 ID?如果是这样,我怎样才能避免这种碰撞?
【问题讨论】:
标签: android android-jobscheduler
如果我使用也安排作业的第 3 方库,这是否意味着我不能使用与他们相同的作业 ID?
正确。
如果是这样,我怎样才能避免这种碰撞?
询问库的开发人员他们使用什么作业 ID,或者这些作业 ID 是否可以通过某种方式进行配置。
【讨论】:
JobScheduler 的第三方库,也不要提供详细信息或可配置性。 “这现在变得强制性”——我将其描述为“更重要”。 “那么这听起来像是一个严重的设计缺陷”——正确。但是,根据定义,没有办法生成一个也不能由其他东西生成的唯一编号。使用随机整数使您不太可能与某物发生碰撞,但不太可能!= 不可能。
id 资源),并说“您需要确保这是一个跨应用程序更新的稳定 id,所以可能不基于资源 ID”。因此,没有系统提供的方法来确保您不会在作业 ID 上发生冲突。
JobScheduler 上使用getAllPendingJobs() 来找出已经使用的ID,这样您就可以避免与它们发生冲突。但是,图书馆可能不会这样做,并且存在竞争条件,所以这只是适度的好处。不能保证您使用的 ID 不会同时或稍后被图书馆使用。
如果询问库的开发人员不起作用,您可能需要计算包名的 md5 并选择最后 4 个字节作为唯一 id。碰撞的几率会小很多。
【讨论】: