Android: Comment utiliser un Gestionnaire handleMessage et accéder à la référence à la MainActivity
J'ai un service qui reçoit une commande à partir de l'Internet et lance un thread d'arrière-plan. Ce fil est passé d'un gestionnaire du service (le service est limité et passé le gestionnaire) et envoie un message au gestionnaire de prendre une photo. Je suis bloqué sur la mise en œuvre de la gestionnaire.
static Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
//TODO: Handle different types of messages
mCamera.takePicture(null, null, MainActivity.this);
}
};
Questions:
- N'Gestionnaire doivent être statique? Sans statique, j'obtiens "Cette classe de Gestionnaire doit être statique ou des fuites pourraient se produire"
- Ne mCamera besoin d'être statique? J'ai été dit de faire mCamera statique, mais pourquoi est-ce nécessaire? Est-il un moyen de l'installation takePicture sans faire mCamera statique?
- Quelle est la bonne manière de passer la référence à MainActivity? Droit maintenant, je reçois le message d'erreur: "Pas de enfermant instance du type MainActivity est accessible dans la portée du
Jetez un oeil ici: stackoverflow.com/a/16071874/2359488
OriginalL'auteur Rich | 2013-06-17
Vous devez vous connecter pour publier un commentaire.
Vous pouvez faire une classe (Activité/Service) de mettre en œuvre
Handler.Callback
et de créer un nouveau Gestionnaire pour elle vianew Handler(this)
.OriginalL'auteur S.D.
Vous pouvez modifier votre code comme suit:
OriginalL'auteur Alexander Kulyakhtin
Voici une bonne explication pourquoi gestionnaire doit être statique:
Cette classe de Gestionnaire doit être statique ou des fuites peuvent se produire: IncomingHandler
Sur votre autre question, si vous faites Gestionnaire statique, vous devriez également faire tous les champs que vous utilisez à l'intérieur statique.
OriginalL'auteur Marek
Vous pouvez utiliser Message membre
obj
et passer à l'objet désiré pour le gestionnaire.OriginalL'auteur Diego Torres Milano