NOTE : Cette réponse a reçu tellement d'attention, que je dois la mettre à jour. Depuis que la réponse originale a été postée, le commentaire de @dzeikei a reçu presque autant d'attention que la réponse originale. Voici donc 2 solutions possibles :
1. Si votre fil d'arrière-plan contient une référence à un Context
objet :
Assurez-vous que vos threads de travail en arrière-plan ont accès à un objet Contexte (peut être le contexte d'application ou le contexte de service). Il suffit ensuite d'effectuer cette opération dans le fil d'exécution du travailleur d'arrière-plan :
// Get a handler that can be used to post to the main thread
Handler mainHandler = new Handler(context.getMainLooper());
Runnable myRunnable = new Runnable() {
@Override
public void run() {....} // This is your code
};
mainHandler.post(myRunnable);
2. Si votre fil d'arrière-plan n'a pas (ou n'a pas besoin de) de Context
objet
(suggéré par @dzeikei) :
// Get a handler that can be used to post to the main thread
Handler mainHandler = new Handler(Looper.getMainLooper());
Runnable myRunnable = new Runnable() {
@Override
public void run() {....} // This is your code
};
mainHandler.post(myRunnable);
2 votes
Vous pouvez également utiliser le récepteur de radiodiffusion personnalisé.... essayer ma réponse ici, [Récepteur de radiodiffusion interne][1] [1] : stackoverflow.com/a/22541324/1881527
0 votes
Il existe de nombreuses façons de le faire. En dehors de la réponse de David et du commentaire de dzeikei dans sa réponse, (3) vous pouvez utiliser un récepteur de diffusion, ou (4) passer le gestionnaire dans les extras de l'Intent utilisé pour démarrer le service, et ensuite récupérer le gestionnaire du thread principal dans le service en utilisant getIntent().getExtras() .
2 votes
@sazzad-hissain-khan, Pourquoi taguer cette question de 2012 avec des réponses majoritairement en Java avec le tag kotlin ?