J'ai l'activité et le service. Lorsque l'activité est démarrée, elle appelle startService()
pour que ce service soit actif même lorsque l'activité est détruite, et bindService()
pour communiquer avec ce service.Service Android: onBind (Intent) et onUnbind (Intent) est appelé une seule fois
bindService()
renvoie la valeur true, mService.onBind()
est appelée et ServiceConnection.onServiceConnected()
est appelée aussi. Tout fonctionne
Lorsque je détruis mon activité en appuyant sur la touche Retour, il appelle unbindService()
, et mon mService.onUnbind()
est appelé. (Je reviens false
dans ce onUnbind()
.)
Puis-je commencer à nouveau cette activité, bindService()
renvoie true, puis mService.onBind()
est pas appelé! Mais ServiceConnection.onServiceConnected()
est appelé aussi, et tout fonctionne à nouveau.
Il semble que Dalvik se souvienne de ce que mon onBind()
a retourné la dernière fois, et n'appelle pas de nouveau onBind()
. Lorsque je détruis à nouveau mon activité, onUnbind()
est et non.
Je peux lier et dissocier ce service à mon activité un certain nombre de fois, mais ces méthodes ne seront plus appelées tant que je n'aurai pas détruit le service en désengageant et en appelant stopService()
.
Dans docs je ne trouve aucune explication de ce comportement. Inversement, this figure indique que onBind()
et onUnbind()
doivent être appelés chaque fois que les clients lient et délient le service. Cette figure peut être trouvée sur le bas de this Dev Guide.
oh merci. J'ai raté ça, malheureusement. Cependant, j'ai découvert que je peux renvoyer true dans 'onUnbind()', puis 'onRebind()' et 'onUnbind()' seront appelés pour le client suivant. –
La documentation est réellement trompeuse. Il dit qu'il n'y a plus d'appels à 'onBind()', mais cela s'applique uniquement au cas de plusieurs clients. Les documents indiquent également que si votre service est démarré et accepte la liaison, lorsque le système appelle votre méthode onUnbind(), vous pouvez éventuellement renvoyer true si vous souhaitez recevoir un appel à onRebind() la prochaine fois qu'un client se connecte au service (** au lieu de recevoir un appel à onBind() **) ". Seulement, il n'y a pas d'appel à 'onBind()'. Encore un autre cas où la documentation est erronée. – Malcolm
désolé de se cogner dans @Malcolm ... j'ai une question concernant ce genre de liaison et unbinding.Qu'en est-il si je mets un thread ServerSocket à l'intérieur de ce service, et dans l'activité A, je mets onStart() et onStop() avec liaison et désengagement en conséquence. Serait-il recréé si je passais à une autre activité et la reliais? ou le Fil reste-t-il le dernier? – gumuruh