2012-02-28 9 views
3

私はバックグラウンドで実行されるサービスを持っています。システムが低メモリ状態でこのサービスを強制終了しても問題ありませんが、システムによってサービスが再開されることは望ましくありません。サービスはSTART_NOT_STICKYで再開

だから、これを行うためには、私のような私のonStartCommandからSTART_NOT_STICKYフラグを返します。しかし

public int onStartCommand(Intent intent, int flags, int startId) { 

     // do stuff here 

     return START_NOT_STICKY; 
    } 

、私は私がログにこれを見るメモリ不足の状況を作成する目的でアプリケーションの束を開きます:

Process com.myapp (pid 3960) has died. 
    Scheduling restart of crashed service com.myapp/.MyService in 5000ms 
    Low Memory: No more background processes. 
    ... 
    Start proc com.myapp for service com.myapp/.MyService: pid=4905 uid=10031 gids={3003, 1015} 

私のプロセスは、すべきではないときに再開されます。どうしてこれなの?ドキュメントによると、START_NOT_STICKYはサービスの再起動を許可すべきではありません。サービスの再起動を防ぐ他の方法はありますか?または、私のサービスがいつ再開されたかを伝えることができますか?

おかげ

+0

上記のサービスを開始する保留中のインテントはありませんか?保留中の意図がある場合、またはサービスが処理する意図が発生した場合でも、開始されます。 – NuSkooler

+0

保留中のインテントはありません。しかし、サービスにはいくつかのBroadcastReceiversがあります...それは何にも影響しますか? – Nick

+0

BroadcastReciverが登録されているインテントが(AndroidManifest.xmlなどで)起動されている場合、そのサービスは起動されて処理されます。 – NuSkooler

答えて

0

あなたがIntentServiceで見たことがありますか?開始し、何をする必要があるのか​​を実行し、その後停止します。私はそれでより良い運を持っています。

+0

残念ながら、それは私の場合にはうまくいかない。私はシステムがそれを殺す時間だと判断するまでサービスを稼働させ続ける必要があります。 – Nick

0

それはNOT_STICKYであってもサービスを再起動するための複数の理由が考えられます:

  • あなたのサービスが、バインドされている場合BIND_AUTO_CREATE
  • bindServiceを使用することにより、あなたはサービスに保留中の意図を持っている場合は

この問題を解決する最善の方法は、サービスのバインドを解除することです。

関連する問題