0

Supposons que je souhaite que mon application synchronise les données d'une base de données en ligne vers la base de données locale. Je comprends que les services sont les composants à rechercher. Si je démarre un service normal, je comprends qu'il commence dans le thread principal et toute tâche fastidieuse que j'exécutera bloquera l'interface utilisateur. Cela signifie que je devrai utiliser quelque chose comme un AsyncTask pour faire le travail. Par contre, si j'utilise un service Intent, je comprends qu'il s'exécute sur un thread parallèle et que l'interface utilisateur n'est pas bloquée si j'exécute une longue tâche. Et tout autre service d'intention que j'appelle sera mis en file d'attente.Exécution d'un nouveau thread à partir de IntentService

Mais que se passera-t-il si je crée un thread parallèle à partir du IntentService pour effectuer un appel réseau?

Le service d'intention attendra-t-il que mon appel réseau se termine ou va-t-il effectuer l'appel dans un thread parallèle et exécuter le prochain service d'intention dans la file d'attente?

+1

Pourquoi avez-vous besoin de créer un fil parallèle dans le fil parallèle pour faire appel au réseau ??? Utilisez-le dans 'IntentService' dirrectly –

+0

Pourquoi un thread parallèle alors que l'instruction' if' se termine? – Xenolion

+0

J'étais juste curieux. Je ne vais pas faire ça –

Répondre

0

Seuls les appels de cycle de vie (par exemple: onCreate(), onStartCommand()) sont appelés sur le thread principal (UI) dans un Service. Si vous avez des activités de base, vous pouvez simplement démarrer vos propres threads d'arrière-plan en onStartCommand(). Vous n'avez pas besoin d'utiliser IntentService pour cela.

IntentService est une implémentation spécifique de Service qui a un comportement spécifique. Vous l'envoyez "travailler" en appelant startService() et en passant un Intent qui décrit le travail à faire. Le IntentService s'exécute jusqu'à ce que tout le «travail» en attente soit terminé, puis s'éteint. IntentService est juste une couche thi8n au-dessus du Service régulier qui gère la mise en file d'attente du "travail", l'exécution du "travail" dans les threads d'arrière-plan, et l'arrêt automatique du IntentService. Si ce n'est pas exactement le comportement que vous voulez, vous ne devriez pas essayer d'utiliser IntentService, car ce n'est pas approprié pour toutes les situations. Il n'est pas si difficile de démarrer les discussions en arrière-plan dans un Service.