私はアクティビティとサービスを持っています。アクティビティが開始されると、このサービスと通信するために、アクティビティが破棄されてもこのサービスを生存させるためにstartService()
とbindService()
が呼び出されます。Androidサービス:onBind(インテント)とonUnbind(インテント)は一度だけ呼び出されます
bindService()
がtrueを返し、mService.onBind()
が呼び出され、ServiceConnection.onServiceConnected()
も呼び出されます。すべての作品。
バックキーを押してアクティビティを破棄すると、unbindService()
が呼び出され、mService.onUnbind()
が呼び出されます。 (私はこのonUnbind()
でfalse
を返す。)
その後、私は真bindService()
戻り、再度、この活動を開始し、その後、mService.onBind()
はは呼び出されません!しかし、ServiceConnection.onServiceConnected()
も呼ばれ、すべてが再び動作します。
Dalvikは前回返されたonBind()
を覚えていて、onBind()
をもう一度呼び出さないようです。私の活動をもう一度破壊すると、onUnbind()
はで、も呼ばれます。
このサービスを自分のアクティビティに何度でもバインドしたりアンバインドすることはできますが、サービスを解除してstopService()
を呼び出すまでこれらのメソッドは呼び出されません。
私はこの現象の説明を見つけることができません。逆に、this figureは、クライアントがサービスをバインドおよびバインド解除するたびにonBind()
およびonUnbind()
が呼び出されることを示しています。この数字は、this Dev Guideの下部に記載されています。
ありがとう。私は残念ながら、これを逃した。しかし、私は 'onUnbind()'で真を返すことができ、 'onRebind()'と 'onUnbind()'が次のクライアントのために呼び出されることを発見しました。 –
文書は実際には誤解を招くことがあります。 'onBind()'の呼び出しはこれ以上行われないと言いますが、これは複数のクライアントの場合にのみ適用されます。 Docsは、 "あなたのサービスが開始され、バインディングを受け入れるならば、システムがあなたのonUnbind()メソッドを呼び出したときに、あなたが次回クライアントがあなたにバインドしたときにonRebind()を呼びたいならば、サービス(**はonBind()への呼び出しを受け取る代わりに**) ")。 'onBind()'は呼び出されません。ドキュメンテーションが間違っているもう一つのケース。 – Malcolm
@Malcolmのおかげで申し訳ありません...私はバインディングとアンバインドのものについて質問があります。私はServerSocketスレッドをそのサービスの中に入れ、Activity-Aでは、それに応じてバインディングとバインドを解除してonStart()とonStop()を配置します。別のアクティビティに移動して再度バインドすると再作成されますか?またはスレッドはまだ最後に残っていますか? – gumuruh