アプリに用意したServiceは複数インスタンスというか複数サービスというか、とにかく1つのclassから複数は生成できないような感じがしている。
バインドされたサービス | Android Developers
1つのBLE PeripheralにアクセスするServiceを作った。
作ったというか、BDSサンプルがそんな感じだったので、そうなった。
こあれを、複数台のPeripheralでも接続できるようにしたい。
これを読んでいて、基本のところに「複数のクライアントが同時にサービスに接続できます」と書いてある。
だから、Serviceを複数作って、それぞれバインドしてやればいいはずだ、と思ったのだ。
やってみたのだけど、なんだか動きがおかしい。。。
bindService()を呼ぶと、2つともServiceConnectionのonServiceConnected()は呼び出されているのだが、なんか、なんかおかしい。
呼ぶときのContextは、同じ画面上なので、同じActivityだ。
このフィールドの値が変わっていたらログが出ているはずなのに、出ていないのに値が初期値と違うとか、ログが出て値が変わっているはずなのに、変わったことになっていないとか。
HandlerのhandleMessage()でServiceからの通知を受け取っているのだけど、そこら辺がおかしいのよねぇ。
Handlerは、onServiceConnected()のところでServiceに渡している。
デバッガで追っていったところ、渡しているHandlerが最後にonServiceConnected()が呼ばれたときのものに差し替わっているようだ。
staticフィールドではないので、やはり大元が1つになったままということか。。。
というわけで、もうちょっと簡単に確認することにした。
Serviceの中にstaticではないint変数を用意して、onServiceConnected()で呼ぶgetService()でカウントアップさせるのだ。
bindService()ごとに作られているなら、毎回同じカウントのはず。。。
うん、カウントアップされますね。
つまり「複数のクライアントが同時にサービスに接続できます」というのは、接続できるサービスが異なる場合は、ということになる。
同じActivity上だと、クライアントとしては1人扱いになるのだろうね。
まあ、context.bindService()と2回呼んでいるだけだから、同じクライアントじゃないか、と言われても否定のしようがない。
たぶん「複数のクライアント」というのは、複数のActivityだったり、複数のアプリだったり、そういう人たちなのだろう。
クライアントの定義を確認せんかったのが悪かった。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。