2010-05-16 2 views
7

J'ai une activité (A) et un service (S) qui obtient commencé par A comme ceci:Dans Android: comment appeler la fonction d'activité d'un service?

Intent i = new Intent(); 
i.putExtra("updateInterval", 10); 
i.setClassName("com.blah", "com.blah.S"); 
startService(i); 

A ont une fonction comme celle-ci dans A:

public void someInfoArrived(Info i){...} 

Maintenant, je veux pour appeler A.someInfoArrived (i) à partir de S. Intent.putExtra n'a pas de version où je pourrais passer une référence d'objet etc ... S'il vous plaît, aidez! PS: L'inverse (un sondage S pour de nouvelles infos) n'est PAS ce dont j'ai besoin. J'ai trouvé assez d'informations sur la façon de le faire.

Répondre

14

Une option consiste à passer de startService() à bindService() et à utiliser le modèle de liaison locale. Ensuite, vous devez appeler A une méthode sur S à un moment donné pour enregistrer une méthode d'écoute ou de rappel. Alors, S aura quelque chose qu'il peut appeler sur A quand certaines informations arrivent. Vous pouvez voir un exemple de projet pour cela here.

Alternativement, vous pouvez laisser startService() en place et utiliser une diffusion Intent pour laisser S dire A à propos de quelques informations arrivant. Vous pouvez voir un exemple de projet démontrant une telle diffusion Intenthere.

+1

Merci, c'est exactement ce que je cherchais! Mes espoirs et croyances dans les forums ont été restaurés :) – nex

+0

Juste implémenté votre deuxième suggestion et cela fonctionne comme un charme. Merci encore! – nex

Questions connexes