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