2011年11月11日金曜日

bindServiceの寿命

bindServiceの寿命


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);


同一の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);

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


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

0 件のコメント:

コメントを投稿