2010-04-16 8 views
3

J'ai une question de compréhension concernant les services Android. J'ai un service qui effectue des opérations http de fond et une activité qui devrait afficher l'état actuel de ces opérations http. Donc, j'implémente l'interface Binder et ainsi de suite. Je peux appeler la méthode bindService et onServiceConnected de mon ServiceConnnection est appelé. Mais pour autant que je sache, onBind n'appelle pas onStartCommand() et donc onStart() du Service n'est jamais appelé.Service Android onBind -> onStart

Comment puis-je appeler la méthode onStart() de la classe de service et démarrer mes opérations. Ou comment est la meilleure façon de démarrer mes opérations dans le service, quand je veux aussi une liaison entre l'activité et le service.

Répondre

5

Mais pour autant que je sache, ne onBind pas appels onStartCommand() et ainsi onStart() du Service est jamais appelé.

Correct.

Alors, comment puis-je appeler la méthode onStart() de la classe de service et commencer mes opérations.

Appelez startService() au lieu de bindService(). Ou, n'utilisez pas onStart() pour «démarrer [vos opérations]» et demandez à votre client lié d'appeler une autre méthode sur l'API exposée du service pour effectuer ce travail.

+0

Ce dernier est ce que je fais en ce moment. Les opérations sont maintenant démarrées par une méthode de l'objet liant. Est-ce que ce «bon» design ou y a-t-il de meilleures solutions? thx de toute façon. – Masala

+0

Cela semble parfaitement bien. – CommonsWare

+0

Dépend de ce que vous voulez réaliser. Si l'opération HTTP doit passer même en arrière-plan, il est dangereux d'utiliser le service lié. Comme un service lié sera détruit lorsque le dernier client sera dissocié - et que vous feriez une fuite de contexte si vous ne déliez pas le service lorsque l'activité est mise en arrière-plan. Ainsi, si vous voulez que l'appel HTTP survive à un appel téléphonique, vous devez appeler bind et démarrer à partir de votre activité. –