我有一个 AlarmService,它每 15 分钟唤醒一次并触发一个 IntentService。但是,我想确保如果以前启动的 IS 已经在运行,AlarmService 不会尝试启动另一个(IS 正在处理文件,如果第二个版本试图对相同的文件采取行动)。
轮询系统以查看我的 IS 实例是否已在运行并跳过 AlarmService cron 的当前迭代的最佳方法是什么?
我有一个 AlarmService,它每 15 分钟唤醒一次并触发一个 IntentService。但是,我想确保如果以前启动的 IS 已经在运行,AlarmService 不会尝试启动另一个(IS 正在处理文件,如果第二个版本试图对相同的文件采取行动)。
轮询系统以查看我的 IS 实例是否已在运行并跳过 AlarmService cron 的当前迭代的最佳方法是什么?
AlarmService 不会尝试启动另一个(IS 正在处理文件,如果第二个版本尝试对相同的文件执行操作,则会出现奇怪的竞争条件)。
不会有比赛条件。首先,永远只有一个IntentService
. 其次,将一次IntentService
只处理一个。Intent
onHandleIntent()
轮询系统以查看我的 IS 实例是否已在运行并跳过 AlarmService cron 的当前迭代的最佳方法是什么?
不要那样做。在您的IntentService
, 中跟踪您上次在数据成员中工作的时间。如果在 中onHandleIntent()
,该值为null
,那么这是您在一段时间内第一次通过,因此您可能想继续进行这项工作。如果值不是null
,则将其与当前时间进行比较,如果太早,则从 中返回onHandleIntent()
。