-
Thread et Service
Bonjour
Je voulais savoir, les service dans Android sont exécutés dans des Thread différents que celui de l'UI ?
-> Si oui, la méthode onCreate est executer dans quel Thread ?
-> de même pour la méthode onStart() ?
J'ai plutôt l'impression que tout ce fait dans le même thread. Et donc je me demande l'intérêt des services locaux (pas remoteService) ?
Autre remarque, quand je lis des tuto sur les services tels que :
- http://www.brighthub.com/mobile/goog...les/34861.aspx
- http://developerlife.com/tutorials/?p=356
Ils se connectent à leur service avec this.bindService(Intent) et démarrent la fonctionnalité de leurs services dans la méthode onCreate() du service. Si cela fonctionne, Android prévoit tout de même la méthode this.startService(Intent) qui appèle la méthode onStart() du service. En suivant leur tuto cette méthode onStart n'est jamais appelée.
C'est un mauvais pattern de leur part ?
Rien ne nous empêche de faire :
this.bindService(Intent) et une fois connecté au service et seulement à ce moment, faire this.startService(Intent) ? Ça me semble respecter beaucoup mieux le SDK ?
-
-
Déception déception..... moi qui aimait bien ton blog ! :cry::cry::cry:
Si je prends du recul sur des tutos c'est bien pour développer proprement. J'ingurgite pas bêtement ce qu'on me donne
La politesse aurait été de répondre aux questions. mais tu ne savais peut être pas y répondre. tant ce cas là, le mieux aurait été de t'abstenir. Parce qu'on attend autre chose d'un membre confirmé.
-
Je suis vraiment desolé de ma reaction! Je te demande pardon.
Par ailleurs je pourrai ajouter le noyaux d'android est sur Linux Version 2.6; par consequent il herite le caractere multi thread;
-
Je suis chiant mais ca me dit toujours pas si les services se déroulaient dans des Threads différents que l'UI. Moi j'ai l'impression qu'ils sont dans le même Thread. Quand je fais un Thread.sleep() dans la méthode onStart() ou onCreate() ca bloque toute l'application. J'aurai pensé que ca ne bloquerait que le service.
Et donc je vois pas à quoi ca sert puisque les services sont censés exister pour être une tache de fond si j'ai bien tout compris.
Pour le reste de mes questions, j'ai continuer à chercher sur la doc google: http://developer.android.com/guide/t....html#servlife
Google nous explique qu'on peut donc démarrer les services soit avec startService() soit avec bindService() et montre le diagramme de cycle de vie. Dans le cas de bindService(), la méthode onStart() du service n'est pas appelée. Les tutos sont donc bien corrects :lol: Et faire ce que je disais : startService() puis et bindService() est donc très bête :oops:
Mais mon problème avec Thread.sleep() reste un mystère...
-
Salut,
Bon déjà, je vais surement pas t'apporter la réponse direct, vu que je la connais pas, mais ne soit pas deçu, on peut tenter de la trouver petit à petit.
Pour commencer, moi j'aurai essayé d'utiliser la plugin DDMS d'Eclipse. Si tu regarde bien, tu as moyen d'inspecter l'activité des Threads du process de ton application. A partir de là, tu pourras surement voir ce qu'il se passe lorsque tu lance le Service en question.
D'autres part, as-tu regardé l'API Demo du SDK ?
il y a une exemple : ServiceStartArguments qui pourrais peut être t'intéresser... Dans le service, ils font un Handler pour la mécanique interne du Service...
Voilà, en espérant t'avoir tout de même aidé...
Bon courage.
-
Merci. J'ai regardé l'API demo. J'ai pas tout compris non plus. Surtout l'exemple que tu mentionnes. :lol:
Mais j'ai continuer à tester et j'en conclu qu'ils sont dans le même Thread. Mais ca n'a pas de sens pour moi. Ça m'énerve :furieux:
J'ai continuer mes recherches et j'ai trouvé un post qui confirme mes dires : http://osdir.com/ml/Android-Beginner.../msg01403.html
donc les Service Local ca sert à rien !???? c'est quand même étrange tout de même ?
-
Oui mais quand tu fais Thread.sleep() , c'est le Thread principale, tu dois plutôt définir ton propre un Thread monthread particulier pour faire le sleep à une operation particuliere
-
Quand je fais une boucle longue For, c'est le même problème. Toute l'appli est en attente.
-
Si c'est ton application qui lance le service et que tu n'as pas threadé ton service, oui c'est normal que la boucle "for" bloque tout.