Ero*_*rol 5 concurrency service android alarmmanager intentservice
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);
}
Run Code Online (Sandbox Code Playgroud)
我使用上面的代码每30秒运行一次我的IntentService.有时,服务过程需要超过30秒,因此另一个必须在前一个完成之前启动.我想知道在那种情况下前一个会发生什么.它被搁置了吗?第二个是否等待前一个完成?
我的第二个问题是:我不希望他们互相等待.我想要两个服务同时运行.因此,无论前一个服务在做什么,都应该开始下一个服务.以上代码是实现这一目标的正确方法吗?
Joe*_*lin 10
IntentService就像一个工作请求队列.直到onHandleIntent完成前一个Intent才会处理新意图.如果有时需要超过30秒才能完成,为什么要每30秒运行一次IntentService?
在提问时,有时候对一个狭隘问题的回答是"你不能做你想做的事"或"你所做的事情不会做你认为的事情".如果您提供问题上下文,则受访者可以更轻松地添加更好的解决方案.
在您的情况下,我只能猜测您应该在需要时向您的IntentService发出一个Intent,并让IntentService的排队机制处理剩下的事情.作为替代方案,您可以使用常规服务和线程池.