9

バインドされたアクティビティがなくなったときに stop() を実行しないようにしたいサービスがあります。

これを実現するために startService() が使用されていることは理解していますが、これをサービスの onBind() メソッド内から呼び出しても問題ありませんか?

アクティビティから呼び出すのはハックのように思えます。サービスは onUnbind() の後にぶらぶらしたいかどうかを最もよく知っているからです。

アクティビティはサービスの現在の状態を示し、何らかの制御を提供するため、bindService() はここで使用する適切なメソッドのようです。

4

2 に答える 2

9

startService()内から呼び出しても問題ないはずonBind()です。onBind()クライアントがバインドされていない場合でも、サービスを維持する必要があると判断できるロジックがある場合は、それを実行する論理的な場所のようです。

推奨されないと主張する回答には同意しません。あなたが説明したアーキテクチャは、カプセル化を効果的に利用しています。クライアントはバインド/バインド解除のみを行い、サービスが (内部的に) どのように実装されているかを知る必要はありません。サービスは、独自のライフサイクルを制御する必要があります。

于 2013-02-11T14:31:59.770 に答える
0

startService()からの呼び出しonBind()はお勧めしません。onBind()クライアントに接続するためのものなので、動作を変更しないでください。

クライアントが接続する前に を呼び出しますstartService()。サービスが既に実行されている場合は効果がなく、クライアント オブジェクトをバインドできます。クライアントがバインドを解除しても、サービスは引き続き実行されます。サービスがいつ存在しないかを知っている場合、サービスは安全stopSelf()に自分自身を呼び出して終了できます。

于 2013-02-10T18:20:11.780 に答える