2009-12-21 5 views
0

Je suis un nouveau développeur android et je suis en train de faire une demande de communication avec SIP. Je voudrais définir une tâche en arrière-plan pour faire toutes les tâches liées au protocole SIP et, si possible, le laisser commencer lorsque le téléphone est démarré. Mes pensées actuelles créent un Service et le laissant démarrer sur le démarrage de l'appareil, le problème est qu'il existe deux types de Services qui utilise AIDL et un qui est démarré avec un Intent.android Explication de service

Je voudrais passer quelques arguments à mon service et le laisser fonctionner indépendamment de mon principal Activity et être en mesure d'informer mon Activity principal des messages entrants. Quelqu'un peut-il me dire comment faire et me diriger vers un bon tutoriel où je peux comprendre la différence entre les deux Service s? J'ai lu un livre sur et quelques tutoriels, y compris les développeurs Android, mais ils m'ont encore plus confus.

Répondre

6

le problème est qu'il ya deux types de services qui utilise AIDL et un qui a commencé cinque une intention

qui est incorrect. Vous utilisez Intents avec les services locaux et les services à distance. Vous utilisez uniquement AIDL avec des services distants.

Je voudrais passer quelques arguments à mon service et laisser courir indepedently de mon activité principale et être en mesure de notify mon activité principale des messages entrants .

Pour passer des « arguments » au service, vous pouvez emballer ceux que les « extras » par putExtra() sur le Intent vous passez à startService() ou bindService().

« avertir mon activité principale des messages entrants », vous pouvez utiliser la diffusion Intents et un BroadcastReceiver dans l'activité, ou vous pouvez lier l'activité au service via bindService() et utiliser des objets d'écoute.

+0

Merci beaucoup encore une question déroutante, car il semble que tout le monde donne une réponse différente, le service est indépendant de l'activité même si c'est un service local ou à distance? En d'autres termes, le service est toujours indépendant de l'activité et fonctionne comme un backround thread pour exécuter des tâches qui prennent beaucoup de temps? corrigez-moi si je me trompe mais que le code de service distant (AIDL) n'est pas exécuté de manière synchrone? – maxsap

+0

"le service est indépendant de l'activité même s'il s'agit d'un service local ou distant?" Oui, c'est simplement une question de savoir si c'est dans le même processus. "et fonctionne comme un fil de backround pour exécuter des tâches chronophages?"Seulement si vous configurez un thread d'arrière-plan, sinon il fonctionne sur le thread d'application principal comme toutes vos activités et autres composants Android." Corrigez-moi si je me trompe mais que le code de service distant (AIDL) n'est pas synchronisé? Oui, – CommonsWare

+0

Hi Commonsware, je m'interrogeais sur votre partie "si vous mettez en place un fil de fond" ... Si vous utilisez AIDL vous obtenez un bout, donc je me demandais comment placer ce bout (qui offre des fonctionnalités) dans un Thread? – TiGer

2

Utilisez un service. Vous pouvez communiquer avec lui en utilisant les procédures définies dans AIDL. S'il doit vous notifier l'application de quelque chose, il peut envoyer une intention à votre demande.

Si vous voulez avoir certains paramètres au démarrage, je les stockerais en utilisant le gestionnaire de préférences.

J'ai écrit quelque chose comme ça pour mon application RandyVideos (disponible gratuitement chez MiKandi). J'ai un service à l'arrière-plan qui s'occupe du réseau. Et l'activité principale communique avec elle via des méthodes décrites dans AIDL. Si le service veut parler à l'activité, il envoie une intention.

+0

merci beaucoup pour votre aide. – maxsap