Maison > Java > javaDidacticiel > Comment gérer la communication cross-thread dans les services Android ?

Comment gérer la communication cross-thread dans les services Android ?

Patricia Arquette
Libérer: 2024-11-30 14:43:11
original
879 Les gens l'ont consulté

How to Handle Cross-Thread Communication in Android Services?

Gestion de la communication cross-thread dans les services Android

Dans les services Android, le multithreading est souvent utilisé pour effectuer des tâches gourmandes en ressources sans bloquer le thread principal de l'interface utilisateur. Cependant, il arrive parfois qu'un thread d'arrière-plan doive interagir avec le thread principal, par exemple en publiant des tâches dans sa file d'attente de messages.

Pour résoudre ce problème, le framework Android fournit des mécanismes de communication entre threads à l'aide de gestionnaires. Un gestionnaire est un objet qui peut traiter des messages sur un Looper spécifié. En utilisant un gestionnaire associé au Looper du thread principal, les tâches peuvent être publiées dans la file d'attente de messages du thread principal à partir d'autres threads.

Solution 1 : Utiliser un objet contextuel

Si le thread d'arrière-plan a une référence à un objet Contexte (soit le contexte d'application, soit le contexte de service), vous pouvez accéder au gestionnaire du Looper principal en tant que suit :

// Get a handler that can be used to post to the main thread
Handler mainHandler = new Handler(context.getMainLooper());

// Prepare a Runnable task to be posted
Runnable myRunnable = new Runnable() {
    @Override 
    public void run() {....} // This is your code
};

// Post the task to the main thread
mainHandler.post(myRunnable);
Copier après la connexion

Solution 2 : Sans objet Contexte

Si le thread d'arrière-plan n'a pas accès à un objet Contexte, vous pouvez utiliser une approche plus directe comme suggéré par @dzeikei :

// Get a handler that can be used to post to the main thread
Handler mainHandler = new Handler(Looper.getMainLooper());

// Prepare a Runnable task to be posted
Runnable myRunnable = new Runnable() {
    @Override 
    public void run() {....} // This is your code
};

// Post the task to the main thread
mainHandler.post(myRunnable);
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal