5
    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 秒的时间,因此必须在前一个进程完成之前启动另一个进程。我想知道在这种情况下前一个会发生什么。它被搁置了吗?第二个要等前一个完成吗?

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

4

1 回答 1

10

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

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

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

于 2012-06-29T18:00:32.280 回答