>% adb shell dumpsys
以下の3パターンでこのコマンドを実行し、出力を比較してみました。
1. Dungeonsアクティビティ起動後
2. 1.の後、Dungeonsアクティビティ終了(購入リクエスト等の操作はなし)
3. DungeonsアクティビティのonCreate文で即座にunBind()を呼び、アクティビティは終了しない。
これらの出力を比較してわかったことをまとめると、このような感じです。
・BillingServiceの他に、MarketBillingServiceが起動されている。
・IntentBindRecordはMarketBillingServiceの出力にのみ存在し、BillingServiceにはない。
・2.の時点でMarketBillingServiceは停止している(BillingServiceは停止せず)
・BillingServiceのProcessRecordには1.の時点でMarketBillingServiceへの
ConnectionRecordが存在するが、2.になるとこれは失われる。
・3.の場合は各サービスは起動しないか、期待通りunBind()で停止する(出力なし)。
この結果を見ると、unBind()を呼ぶことで参照を破棄されているのはBillingServiceではなく、
MarketBillingServiceの方であるように思います。
だとすると、やはりkacodama様が仰るようにBillingServiceは「常に動いていることが前提」ということでしょうか。
しかしそうなると、今度は再起動しただけでその前提が覆ってしまう問題があります(再起動時にはBillinServiceは起動しないので)。
やはりサンプルのどこかに足りない部分がありそうな気がします。