【问题标题】:Multiple Instances of IntentService in AndroidAndroid中IntentService的多个实例
【发布时间】:2012-07-01 06:16:14
【问题描述】:
    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 秒的时间,因此必须在前一个进程完成之前启动另一个进程。我想知道在这种情况下前一个会发生什么。它被搁置了吗?第二个要等前一个完成吗?

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

【问题讨论】:

  • 不知道但试试这个代码。 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

标签: android service concurrency alarmmanager intentservice


【解决方案1】:

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

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

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

【讨论】:

  • 因为我每 30 秒录制一次简短的音频查询并对其进行一些信号处理。对于不同的查询,我需要不同的结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-18
  • 1970-01-01
  • 2013-09-27
相关资源
最近更新 更多