IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Implémentation d'un singleton sous Android


Sujet :

Android

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 101
    Points : 86
    Points
    86
    Par défaut Implémentation d'un singleton sous Android
    Bonsoir à tous !

    Voilà, j'ai implémenté un singleton dans mon appli Android. L'idée est d'avoir une classe "utilitaire" permettant d'effectuer des traitements communs à plusieurs Activity.

    Le souci de cette implémentation, c'est que j'ai besoin d'accéder au Context ou au ContentResolver pour certaines méthodes, afin de récupérer les contacts stockés sur le téléphone par exemple...

    Du coup, voici comment j'ai résolu ce problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public static Tools instance(Context context, ContentResolver contentResolver) {
        if (instance == null) {
          instance = new Tools(context, contentResolver);
        }
        return instance;
    }
     
    public static Tools instance() {
        return instance;
    }
    Ce qui n'est pas terrible. Un appel à Tools.instance() peut produire des NullPointerException si on n'a pas appelé l'autre méthode auparavant. Et appeler l'autre méthode avec le Context et le ContentResolver en paramètres est un peu fastidieux.

    Je me demande donc si l'API Android propose quelque chose pour faire ça proprement ? Qu'avez-vous utilisé comme technique ?

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    En context je te conseil de lui passer l'instance de "application" récupéré à partir d'une activity ou service :

    http://developer.android.com/referen...etApplication()
    http://developer.android.com/referen...etApplication()

  3. #3
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Si tu as besoin d'un context c'est que ca doit etre iniitliasé par un context.
    Il est fortement suggeré/conseillé d'utiliser celui de l'application (pour éviter de perdre de la mémoire en stockant des liens sur les activités mortes).
    Et il est surtout possible de surcharger l'application pour qu'elle appelle l'init method...


    Maintenant... je trouve que c'est bizarre de stocker un objet comme ca, donc il y a un probleme de conception peut-etre... Tu veux faire quoi de cet objet ?
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  4. #4
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    Le mieux est carrément d'étendre la classe Application, la singletoniser et la déclarer dans le manifeste. C'est la solution "élégante" du framework Android pour partager des données/traitements entre les activités d'une même application.
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

Discussions similaires

  1. Implémentation d'Equinox sous Android
    Par simaing dans le forum Plateformes réactives et architectures modulaires
    Réponses: 0
    Dernier message: 19/06/2012, 00h45
  2. [Débutant] Implémentation du design patern Singleton sous Borland C++ Builder XE
    Par otacon ghost dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/08/2011, 15h21
  3. La 2D sous Android
    Par Julien Bodin dans le forum Android
    Réponses: 7
    Dernier message: 18/03/2009, 21h04
  4. Implémentation du pack SP1 sous Windows Vista
    Par mf190 dans le forum Windows Vista
    Réponses: 8
    Dernier message: 02/10/2008, 10h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo