[Android]ServiceのonRebindが呼ばれない原因と対策

Androidで独自のServiceを実装する際、bindとunbindを繰り返すような実装を行わなければならないことがある。

この時、最初のbind時にはonBindが実行され、unbind後に再度bindするとonRebindが実行されることを期待したコードを書くことになるが、実装方法を間違えると再bind時にonRebindが呼ばれないという現象が発生するので注意が必要となる。

スポンサーリンク

onUnbindでfalseを返すとonRebindが呼ばれない

ずばり見出しの通りだが、onUnbindでfalseを返すようになっているServiceは、unbind後に再度bindしてもonRebindが呼ばれない。

再bindしてるんだから勝手にonRebindしてくれよと思わないでもないが、この動作はしっかりリファレンスに記載されている。

public void onRebind (Intent intent)

Called when new clients have connected to the service, after it had previously been notified that all had disconnected in its onUnbind(Intent). This will only be called if the implementation of onUnbind(Intent) was overridden to return true.

ちなみにonUnbindはデフォルトでは以下のようにfalseを返すのみの実装になっている。

つまり、カスタムのServiceを作ってonRebindで何か処理したい場合、以下の手順が必要となる。

  1. onRebindを実装する
  2. onUnbindをオーバーライドしてtrueを返す

onUnbindで確実にtrueを返すようになっているか確認するようにしましょう。

教訓

リファレンスを見よう。ログで確認しよう。

以上。