Android: Comment obtenir le contexte de l'appel de son activité dans un IntentService?
Si je l'appelle
Intent intent = new Intent(ReadingActivity.this, AdService.class);
startService(intent);
de l'intérieur de la onCreate
méthode de MyActivity
classe, comment puis-je accéder à MyActivity.this
de l'intérieur de la onHandleIntent()
méthode de la IntentService
classe
@Override
protected void onHandleIntent(Intent arg0) {
//TODO Auto-generated method stub
((BookLib) getApplication()).createAd(I need to pass the calling activities context here);
}
OriginalL'auteur jamesc | 2012-07-30
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas.
Déplacer
createAd()
dans l'activité. Si le temps est un problème, utilisez unAsyncTask
plutôt qu'unIntentService
.Un
IntentService
est surtout pour les cas où vous souhaitez le travail pour aller sur découplée de tout activité (par exemple, le téléchargement d'un fichier qui devrait se poursuivre, même si l'utilisateur quitte l'INTERFACE pour arriver à faire quelque chose d'autre).Cette réponse, c'est un bon conseil dans ce cas---un marteau et un clou de l'histoire. Pourtant, dans le cas où vous avez besoin d'accéder au contexte (peut-être une instance de l'activité),
getApplicationContext()
available. Je pense que même à partir d'unIntentService
, il y a des cas où cela a du sens. Par exemple, pour obtenir les services du système (par exemple,context.getSystemService(Context.ALARM_SERVICE);
).OriginalL'auteur CommonsWare
Il me semble que vous essayez de faire de la communication bidirectionnelle avec votre
Activity
etService
. Au lieu d'envoyer unIntent
à votre service, pensez à la liaison à la place.EDIT: Réponse à CommonsWare commentaires:
Où est le problème avec la liaison à un
IntentService
? J'ai expédié les applications qui fonctionnent très bien, qui contiennent un liéIntentService
. Vous avez fourni aucune preuve pour appuyer votre demande.De ici:
Les documents indiquent clairement que le système prend en charge simultanée, de liaison et de départ. À l'aide d'un
IntentService
plus régulièrementService
ne change pas cela. Même si vous décidez d'arrêter le service après le traitement d'unIntent
, Android laisse courir aussi longtemps que quelque chose est toujours lié à elle.En outre, en fonction de ce que l'OP est en train de faire,
IntentService
pourrait ne plus être nécessaire.IntentServices
ne vont pas bien ensemble. Liaison à des services réguliers est très bien, et l'envoi des commandes àIntentServices
(viastartService()
) c'est bien."Où est le problème avec la liaison à un IntentService?" -- au mieux, il ne fonctionnera que si vous vous liez d'abord, avant d'appeler
startService()
. Sinon, vous obtenez des conditions de course oùonHandleIntent()
se termine avant que la liaison se produit, provoquant la premièreIntentService
instance d'être détruite (viastopSelf()
) et la liaison à se produire sur la seconde. À mon humble avis, si vous pensez que vous voulez lier à unIntentService
, vous devriez vraiment se lier à un régulièreService
et gérer votre propre thread d'arrière-plan.OriginalL'auteur Aaron Klotz