2012-06-29 37 views
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秒以上的时间,所以另一个服务进程必须在前一个完成之前启动。我想知道在这种情况下前一个会发生什么。它被搁置了吗?第二个等待前一个完成吗?Android中IntentService的多个实例

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

+0

不知道,但试试这段代码。 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); – rajpara

回答

9

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

关于提问,有时候对于狭义问题的答案要么是“你不能做你想做的事”或者“你所做的不会做你认为它做的事”。如果您提供问题背景,则更容易让的受访者添加更好的解决方案。

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

+0

因为我每30秒钟录制一个简短的音频查询并对其使用一些信号处理。我对不同的查询需要不同的结果。 – Erol