昨晩作成した 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 メソドについては略。