2011年11月11日金曜日

bindServiceの寿命

bindServiceの寿命

1
BIND_AUTO_CREATEフラグを付けて、bindServiceメソッドだけでServiceオブジェクトを生成・起動した場合、起動元でunbindServiceメソッドを実行すると、起動先のServiceオブジェクトはdestroyされる。
例えば、次のとおり、bindServiceメソッドだけでServiceを生成した場合、unbindServiceメソッドを実行すると、Serviceオブジェクトはdestroyする。
            Intent it;
            it = new Intent(this, MyService.class);
            bindService(it, conn, BIND_AUTO_CREATE);

2
同一のServiceクラスを引数として、startServiceメソッドとbindServiceメソッドとを実行させた場合、そこで稼働するのは、同一の1個のServiceオブジェクトである。
つまり、startServiceメソッドやbindServiceメソッド毎に、異なったオブジェクトのServiceが起動してくるのでは無い。
例えば、次のように実行しても、生成されるServiceオブジェクトは1個である。
            Intent it;
            it = new Intent(this, MyService.class);
            bindService(it, conn, BIND_AUTO_CREATE);
            it = new Intent(this, MyService.class);
            it.putExtra("MyMes", true);
            startService(it);

3
上記2のように、startServiceメソッドとbindServiceメソッドが混在して実行した場合、unbindServiceをしても、Serviceオブジェクトがdestroyされることは無い。
startServiceメソッドとbindServiceメソッドが混在して実行されていても、(bindServiceメソッドに基づく)Messengerでのやり取りは可能である。

4
unbindServiceメソッドを実行した後も、Serviceを継続して存続させたいのであれば、事前にstartServiceメソッドをダミーで実行させておけば良い。

0 件のコメント:

コメントを投稿