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);
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);
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!