Android中IntentService的多个实例

时间:2012-06-29 17:40:01

标签: android service concurrency 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);
    }

我使用上面的代码每30秒运行一次IntentService。有时,服务过程需要超过30秒,因此另一个必须在前一个完成之前启动。我想知道在那种情况下前一个会发生什么。它被搁置了吗?第二个是否等待前一个完成?

我的第二个问题是:我不希望他们互相等待。我想要两个服务同时运行。因此,无论前一个服务在做什么,都应该开始下一个服务。以上代码是实现这一目标的正确方法吗?

1 个答案:

答案 0 :(得分:10)

IntentService就像一个工作请求队列。在onHandleIntent完成前一个Intent之前,不会处理新的意图。如果有时需要超过30秒才能完成,为什么要每30秒运行一次IntentService?

关于提问,有时候对一个狭隘问题的回答是“你不能做你想做的事情”。或者"你正在做的事情不会做你认为它做的事情"。如果您提供问题上下文,那么受访者添加更好的解决方案会更容易。

在你的情况下,我只能猜测你应该在需要的时候向你的IntentService发出一个Intent,并让IntentService的排队机制处理其余的事情。作为替代方案,您可以使用常规服务和线程池。