【问题标题】:JobScheduler - How do I determine a unique Job ID?JobScheduler - 如何确定唯一的作业 ID?
【发布时间】:2017-06-07 13:58:19
【问题描述】:

根据documentation,每个 uid 的作业必须有一个唯一的作业 ID。
如果我使用也安排作业的第 3 方库,这是否意味着我不能使用与他们相同的作业 ID?如果是这样,我怎样才能避免这种碰撞?

【问题讨论】:

    标签: android android-jobscheduler


    【解决方案1】:

    如果我使用也安排作业的第 3 方库,这是否意味着我不能使用与他们相同的作业 ID?

    正确。

    如果是这样,我怎样才能避免这种碰撞?

    询问库的开发人员他们使用什么作业 ID,或者这些作业 ID 是否可以通过某种方式进行配置。

    【讨论】:

    • 有没有更可行的解决方案?如果使用 JobScheduler(现在已成为强制性)需要我与我使用的每个 3rd 方库进行通信并关注他们的更新,那么这听起来像是一个严重的设计缺陷......
    • @OriWasserman:“有没有更可行的解决方案?” -- 不要使用反过来使用JobScheduler 的第三方库,也不要提供详细信息或可配置性。 “这现在变得强制性”——我将其描述为“更重要”。 “那么这听起来像是一个严重的设计缺陷”——正确。但是,根据定义,没有办法生成一个也不能由其他东西生成的唯一编号。使用随机整数使您不太可能与某物发生碰撞,但不太可能!= 不可能。
    • @OriWasserman:他们特别建议不要使用资源生成的值(例如,id 资源),并说“您需要确保这是一个跨应用程序更新的稳定 id,所以可能不基于资源 ID”。因此,没有系统提供的方法来确保您不会在作业 ID 上发生冲突。
    • @OriWasserman:您可以在JobScheduler 上使用getAllPendingJobs() 来找出已经使用的ID,这样您就可以避免与它们发生冲突。但是,图书馆可能不会这样做,并且存在竞争条件,所以这只是适度的好处。不能保证您使用的 ID 不会同时或稍后被图书馆使用。
    • @OriWasserman:顺便说一句,FWIW,我写了a blog post 更多关于这个话题。感谢您指出这个问题!
    【解决方案2】:

    如果询问库的开发人员不起作用,您可能需要计算包名的 md5 并选择最后 4 个字节作为唯一 id。碰撞的几率会小很多。

    【讨论】:

      猜你喜欢
      • 2021-05-22
      • 1970-01-01
      • 2017-08-18
      • 1970-01-01
      • 1970-01-01
      • 2012-07-12
      • 2018-06-17
      • 2011-10-04
      • 2022-01-08
      相关资源
      最近更新 更多