2012-06-29 9 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); 
    } 

私はIntentServiceを30秒ごとに実行するために上記のコードを使用しています。時には、サービスプロセスが30秒以上かかるので、前のプロセスが終了する前に別のプロセスを開始する必要があります。私はその場合に前のものに何が起こるかを知りたい。それは保留になっていますか?もう1人は前のものが終了するのを待っていますか?AndroidのIntentServiceの複数のインスタンス

私の2番目の質問は:私は彼らがお互いを待つことを望んでいません。私は2つのサービスを同時に実行したい。したがって、前のサービスが何をしているかに関係なく、次のサービスを開始する必要があります。これを達成するためのコードは正しい方法ですか?

+0

このコードを試してみてください。 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); – rajpara

答えて

9

IntentServiceは作業要求キューのようなものです。新しいインテントは、前のインテントに対してonHandleIntentが終了するまで処理されません。なぜ30秒以上かかる場合に、30秒ごとにIntentServiceを実行するのですか?

尋ねる質問に関して、狭い質問に対する答えは、「あなたがしたいことをすることができません」または「あなたがしていることは、あなたが思っていることをしません」です。問題のコンテキストを提供する場合は、回答者の方がの方が簡単です。をより良い解決策に追加してください。

あなたの場合、IntentServiceを必要に応じて起動し、IntentServiceのキューイングメカニズムが残りを処理するようにする必要があると推測できます。また、通常のサービスとスレッドプールを使用することもできます。

+0

私は30秒ごとに短いオーディオクエリを録音しており、その上で何らかの信号処理を使用しています。私は異なるクエリのために異なる結果が必要です。 – Erol