private void setFPAlarm()
{
Intent intent = new Intent(this, FPService.class);
PendingIntent pi = PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
long nextSearchTimeMillis = DateUtils.MINUTE_IN_MILLIS/2;
Time nextSearchTime = new Time();
nextSearchTime.set(nextSearchTimeMillis);
AlarmManager FPAlarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
FPAlarm.setRepeating(AlarmManager.RTC, System.currentTimeMillis(), nextSearchTimeMillis, pi);
}
我使用上面的代码每30秒运行一次IntentService。有时,服务过程需要超过30秒,因此另一个必须在前一个完成之前启动。我想知道在那种情况下前一个会发生什么。它被搁置了吗?第二个是否等待前一个完成?
我的第二个问题是:我不希望他们互相等待。我想要两个服务同时运行。因此,无论前一个服务在做什么,都应该开始下一个服务。以上代码是实现这一目标的正确方法吗?
答案 0 :(得分:10)
IntentService就像一个工作请求队列。在onHandleIntent完成前一个Intent之前,不会处理新的意图。如果有时需要超过30秒才能完成,为什么要每30秒运行一次IntentService?
关于提问,有时候对一个狭隘问题的回答是“你不能做你想做的事情”。或者"你正在做的事情不会做你认为它做的事情"。如果您提供问题上下文,那么受访者添加更好的解决方案会更容易。
在你的情况下,我只能猜测你应该在需要的时候向你的IntentService发出一个Intent,并让IntentService的排队机制处理其余的事情。作为替代方案,您可以使用常规服务和线程池。