サービスは自動的に破棄されますか?


1概要
サービスのいくつかのアプリケーションシーンで、サービスが本当に破棄されたかどうかを考えたことがありますか?この記事では、さまざまなシーンで、Serviceが自動的に破棄され、再構築される方法について簡単に説明します.
2シーンの使用
2.1同一アプリケーション内でのサービスの使用
  • startService起動サービス
  • 1.アプリケーションを直接閉じます.ユーザーがbackキーで戻ってアプリケーションを閉じた場合、アプリケーションは本当の意味で終了しない可能性があります.タスクバーのショートカットキーをクリックして確認した場合、アプリケーションはまだ存在する可能性があります.この場合、アプリケーションは完全に終了していないため、Serviceは破棄されません.
    2.アプリケーションを直接閉じて、アプリケーションは確かに殺された.タスクバーを使用して、アプリケーションのリストを表示します.アプリケーションはありません.この場合、onStartCommandの戻りパラメータを参照して、サービングの状態を判断する必要があります.
    onStartComandの使用時に返されるのは(int)整形です.
    この整形には4つの戻り値があります:START_STICKY、START_NO_STUCKY、START_REDELIVER_INTENT、START_STICKY_COMPATIBILITY.
    これらの意味は次のとおりです.
    1):START_STICKY:サービスプロセスがkillによって削除された場合、サービスを保持する状態は開始状態ですが、送信されたintentオブジェクトは保持されません.その後、サービスステータスが開始状態であるため、サービスを作成すると必ずonStartCommand(Intent,int,int)メソッドが呼び出されます.その間にサービスに起動コマンドが渡されない場合、パラメータIntentはnullになります.
    2):START_NOT_STICKY:「非粘性」.この戻り値を使用すると、onStartCommandを実行した後、サービスが異常killによって削除された場合、システムは自動的にサービスを再起動しません.
    3):START_REDELIVER_INTENT:Intentを再送します.この戻り値を使用すると、onStartCommandの実行後にサービスが異常killによって削除されると、自動的にサービスが再起動され、Intentの値が入力されます.
    4):START_STICKY_COMPATIBILITY:START_STICKYの互換バージョンですが、サービスがkillされた後に必ず再起動できる保証はありません.
  • bindServiceバインドサービスアプリケーションを使用して終了すると、サービスは自動的に破棄されます.
  • startServicesを使用してサービスを開始し、bindServicesバインドサービスアプリケーションを使用して終了すると、onStartCommandがスティッキーサービスを返すと、サービスは再構築され、onStartCommandが実行されます.つまり、サービスは正常に動作します.非粘性サービスを返すと、サービスは再構築されますが、onStartCommandは実行されません.つまり、サービスは再構築されますが、実行中ではありません.
  • bindServiceバインドサービスを使用し、startServiceを使用してサービスを開始します.このシーンは、3番目のシーンと同じです.

  • 2.2異なるアプリケーション間でのサービスの使用
  • startServiceを使用してサービスを開始し、サービスが存在するアプリケーションを閉じる場合は、同じアプリケーションの場合を参照することができる.サービスを開始するプロセスを閉じると、サービスに影響がないため、サービスは破棄されません.
  • bindServiceバインドサービスを使用するには、サービスを破棄するために複数のクライアントがサービスと接続を切断する必要があります.
  • startServicesを使用してサービスを開始し、bindServicesバインドサービス1を使用してサービスが存在するアプリケーションを閉じる場合:onStartCommandが戻ってきたのは粘性サービスであり、クライアントが終了した後、サービスは再構築され、onBindが再実行され、conStartCommandが再実行される.非粘性サービスを返すと、サービスが再構築され、onBindメソッドが再実行されます.2)サービス開始者のプロセスを閉じる:startServiceを使用して起動した場合、サービスは破棄されません.bindServiceバインドサービスを使用する場合、複数のクライアントがすべて終了すると、サービスは解放されます.そうでなければ、サービスには影響しません.
  • はbindServiceバインドサービスを使用し、startService起動サービスを使用して第3のシーンを参照します.