1

我有一个 AlarmService,它每 15 分钟唤醒一次并触发一个 IntentService。但是,我想确保如果以前启动的 IS 已经在运行,AlarmService 不会尝试启动另一个(IS 正在处理文件,如果第二个版本试图对相同的文件采取行动)。

轮询系统以查看我的 IS 实例是否已在运行并跳过 AlarmService cron 的当前迭代的最佳方法是什么?

4

1 回答 1

8

AlarmService 不会尝试启动另一个(IS 正在处理文件,如果第二个版本尝试对相同的文件执行操作,则会出现奇怪的竞争条件)。

不会有比赛条件。首先,永远只有一个IntentService. 其次,将一次IntentService只处理一个。IntentonHandleIntent()

轮询系统以查看我的 IS 实例是否已在运行并跳过 AlarmService cron 的当前迭代的最佳方法是什么?

不要那样做。在您的IntentService, 中跟踪您上次在数据成员中工作的时间。如果在 中onHandleIntent(),该值为null,那么这是您在一段时间内第一次通过,因此您可能想继续进行这项工作。如果值不是null,则将其与当前时间进行比较,如果太早,则从 中返回onHandleIntent()

于 2011-02-26T00:55:50.537 回答