2012-12-27 30 views
45

である私ははSTART_STICKY、START_NOT_STICKYとSTART_REDELIVER_INTENTサービス

  1. START_STICKY、
  2. START_NOT_STICKYと

は誰でも例で明確に説明することができます

  • START_REDELIVER_INTENTを理解することができません。

    私はthisリンクを通過しましたが、はっきり理解できませんでした。

  • +0

    [START \ _STICKYとSTART \ _NOT \ _STICKY](http://stackoverflow.com/questions/9093271/start-sticky-and-start-not-sticky) –

    答えて

    89

    これらはサービスに関連しています。我々は、サービスがバックグラウンドで実行され続けていること、そして実行するメモリを消費することも知っています。

    アンドロイドデバイスで実行されるアプリケーションの数が増えるにつれて、デバイスのメモリは低くなり続け、時間が経過するとデバイスメモリが極端に低くなると、アンドロイドシステムはプロセスを終了してメモリを解放しますプロセスによって占有される。

    しかし、あなたはサービスでいくつかの重要な仕事をしているかもしれませんが、サービスが停止すると終了することもあります。 これらのコンセプトは、デバイスのメモリが安定したときやサービスを再起動する準備ができたときに、どのようなアクションを実行したいかをAndroidシステムに伝えることです。これらの

    最も簡単な説明が可能性があり、

    START_STICKY-は、低メモリから回復した後、十分なメモリが利用可能であるとき、サービスの新しいコピーを作成するためにシステムに指示します。ここでは、以前に計算した結果が失われます。

    START_NOT_STICKY-は、十分なメモリがある場合でも、サービスの再起動を気にしないようシステムに指示します。

    START_REDELIVER_INTENT-は、クラッシュ後にサービスを再起動し、クラッシュ時に存在していたインテントを再配信するようシステムに指示します。

    +0

    の可能重複すごいああそうありがとうそんなにsahil.itは本当に役に立ちました。ありがとうございました –

    +0

    @ user1841444:喜んでお手伝いします。 –

    +0

    返品コード(START_STICKYやSTART_NOT_STICKYなど)はAndroidがサービスを選択する方法に影響しますか? – derelict

    3

    まあ、私はあなたのリンクのスレッドを読んで、それはすべて言います。あなたのサービスがメモリ不足のためアンドロイドによって殺され、そしてAndroidは、その後、いくつかのメモリをクリアしている場合

    ...

    1. STICKY:その特定のフラグが設定されているので... Androidは、あなたのサービスを再起動します。
    2. NOT_STICKY:... Androidが気にしないようにAndroidに通知するため、Androidは再起動を気にしません。
    3. REDELIVER_INTENT:... Androidはサービスを再起動し、同じ目的を同じサービスのonStartCommand()に再配信します。
    +0

    ありがとう、私はポイントを得た –

    2

    両方のコードは、電話機がメモリ不足になり、実行が終了する前にサービスを終了した場合にのみ関連します。 START_STICKYは、十分なメモリがある場合にOSにサービスを再作成し、ヌルインテントでもう一度onStartCommand()を呼び出すように指示します。 START_NOT_STICKYは、OSにサービスの再作成を邪魔しないように指示します。 3番目のコードSTART_REDELIVER_INTENTもあります。このコードは、OSに、onStartCommand()と同じインテントを再送するように指示します。

    Dianne Hackbornのこの記事では、これの背景を公式のドキュメントよりもはるかによく説明しました。

    出典:http://android-developers.blogspot.com.au/2010/02/service-api-changes-starting-with.html

    それが実行されている間、そのプロセスが殺されている場合、ここで重要な部分は、それがサービスで何をすべきかのシステムを伝える、関数によって返された新しい結果コードです:

    START_STICKYは、以前の動作と基本的に同じです。 サービスは「開始済み」のままで、後でシステムによって再起動されます。 プラットフォームの以前のバージョンとの唯一の相違点は、プロセスが強制終了されたために再起動された場合、 は、サービスの次のインスタンスに対してonStartCommand() が呼び出されず、nullインテント 。このモードを使用するサービスは、常に がこのケースをチェックし、適切に対処する必要があります。

    START_NOT_STICKYはonStartCreated()から戻った後に残っスタートが提供するコマンドないと、 場合、プロセスが殺され、 は、サービスが停止の代わりに、再起動される、と述べています。これにより、 コマンドを実行している間だけ実行されるサービスに対して、 の方がより意味を持ちます。たとえば、アラームから何らかのネットワーク状態をポーリングするために、15分ごとにサービスを開始することがあります( )。その作業中に が殺された場合は、次回にアラームが発生したときには を停止して開始するのが最善です。 サービスのプロセスが殺されている場合を除いて、それが完了するまで、それはそれに再配信されます与えられた 意図、その意図についてstopSelf()を呼び出す前に

    START_REDELIVER_INTENTは、START_NOT_STICKYのようなものです (ない限り、より多くの試行のいくつかの番号の後にそれでも、完了することはできません、 の時点で、システムはあきらめます)。これは、作業のコマンドを受け取っている であり、最終的に が送信された各コマンドの作業を完了することを確認したいサービスに役立ちます。

    +0

    最後の段落から、私は 'START_REDELIVER_INTENT'が' START_NOT_STICKY'のようなものであることに同意しない。代わりに 'START_STICKY'のようなものです – CopsOnRoad

    関連する問題