昨晩作成した Service の纏め
超微妙。なのでリトライ。
できる事
- Service の起動
- Service への接続、切断
- Service の終了
- Service と起動、接続側との連携
- Service から BroadcastReceiver への通知
- ServiceConnection の onServiceConnected メソドを使った IBinder なオブジェクトの取得
Service の起動
- 起動シーケンス
- 起動する Service な Intent を生成
- startService メソドにその Intent を渡す
- サービスが識別できる IntentFilter の生成
- registerReceiver メソドに上記 IntentFilter と BroadcastReceiver のサブクラスのインスタンスを渡す
BroadcastReceiver のサブクラス
- Service の起動に必要
- onReceive で bind したサービス側からの通知を受ける事が可能
- Service 側からは sendBroadcast メソドを使用して通知
Service との接続 (bind)
- bindService メソドに Intent オブジェクトと ServiceConnection オブジェクトと Context.BIND_AUTO_CREATE (通常これ) を渡せば良い
- この時、ServiceConnection#onServiceConnected が呼び出される
- Service 側では onBind メソドが callback として呼び出される
Service との切断 (unbind)
- unbindService メソドに ServiceConnection オブジェクトを渡す
- この時、ServiceConnection#onServiceDisconnected が呼び出される
- Service 側では onUnbind メソドが callback として呼び出される
ServiceConnection#onServiceConnected
- 引数で渡される IBinder 型の第二引数は Service 側の onBind メソドの戻り値
- IBinder なオブジェクトを使って Service なオブジェクトの getter を作成しておけばサービス起動側から Service な public メソドの呼び出しが可能
Service の終了
- unbindService メソドによりサービスとの切断
- unregisterReceiver メソドに BroadcastReceiver のサブクラスのインスタンスを渡す
- Service なオブジェクトの stopSelf というメソドを呼び出してサービスを終了
onRebind メソドについては略。