最終更新:2016-01-19 (火) 17:51:42 (1367d)  

Android/サービス/ライフサイクル はてなブックマークを見る
Top / Android / サービス / ライフサイクル

http://www.techdoctranslator.com/android/guide/services

形態

startService

  • Context.startService/Context.stopService
  • stopself
  • サービスがいちど開始されると、それを開始したコンポーネントがたとえ破棄されたとしても、無期限にバックグラウンドで実行することができます。
  • 通常は、開始されたサービスは単一の動作であり、呼び出し元に結果を戻すことはありません。
  • 例えば、サービスでネットワークを介してファイルのアップロードやダウンロードを行うことがあります。
  • 作業が完了したらサービスは自身を停止させる必要があります。

bindService

  • バインドされたサービスは、コンポーネントとサービスとの双方向のやり取り、リクエストの送信、結果の取得、さらにそれらをプロセス間通信 ( IPC ) を使ってプロセスを通して行うことができるクライアントサーバ型のインターフェイスを提供します。
  • バインドされたサービスは別のアプリケーションコンポーネントがそれにバインドしている間のみ実行されます。
  • 複数のコンポーネントがいちどにサービスにバインドすることができますが、それらのすべてがアンバインドされるとサービスは破棄されます。

両方

  • サービスは開始されるのと ( 無期限に実行させるために ) と同様にバインドされることも許可し、両方の方式で動作させることができます。これは単にふたつのコールバックメソッドを実装するかどうかの話で、onStartCommand() はコンポーネントがサービスを開始することを許可し、onBind() はバインドすることを許可します。

無期限に実行

  • Context.startService/Context.stopService
  • Service全般として実行中はServiceからActivityへIntentの発行が可能
  • サービス起動後はActivityからServiceを制御する経路がない
  • Serviceの生存期間はActivityに依存しない。明示的にstopServiceが呼ばれるまで動き続ける。

呼び出し順

Android/バインドされたサービス

  • Context.bindService/Context.unbindService?
  • バインド(bind)という仕組みを使い、ActvitiyとServiceでコネクションを確立する(接続する)
  • バインドを使うことでActivityからServiceを制御できる
  • Serviceの生存期間はコネクションに依存。コネクションが切断されるとServiceは終了する。

呼び出し順

注意点

  • 通常は、クライアントのライフサイクルの立ち上がりと終了のタイミングに合わせて、その間でバインドとアンバインドをペア設定します。 次に例を示します。
    • アクティビティが見えている間のみサービスとやり取りする必要がある場合は、 onStart() の間にバインドし、onStop?() の間にアンバインドします。
    • アクティビティがバックグラウンドで停止している間も応答を受け取りたい場合は、onCreate() の間にバインドし、onDestroy() の間にアンバインドします。 つまり、アクティビティの実行中は(バックグラウンドも含む)常にサービスを使用する必要があるため、サービスが別のプロセスにある場合は、プロセスの重みを上げて、システムに強制終了させやすいようにします。
  • 注: 通常、アクティビティの onResume?() と onPause?() の間にはバインドとアンバインドは行いません。