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 :

getContext(), getBaseContext() ou getApplicationContext()


Sujet :

Android

  1. #1
    Membre confirmé
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2012
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 124
    Par défaut getContext(), getBaseContext() ou getApplicationContext()
    Bonjour,

    après des recherches et des resultats différents j'aimerais étre fixé sur, le context donc j'aimerais savoir dans quel cas utiliser, getContext(),getBaseContext(),getApplicationContext() ?

    Merci

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Concrètement il y'a 2 types de contexte :

    Le contexte de l'application , qui existe tant que l'application existe
    La contexte d'activity qui lui peut disparaitre en même temps qu'une activity

    Dans une activité pour le contexte tu utiliseras this.
    Pour du code qui doit vivre tout au long d'une application tu utiliseras getApplicationContext().
    Pour les Service et BroadcastReceiver tu utilises leur propre contexte

    Ce que j'aime bien faire c'est faire une classe qui dérive d'Application et qui permet de récupérer le contexte de l'application simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    public class MonApp extends Application {
     
    	/** Context de l'application */
    	private static Context context;
     
    	/**
             * Lancement de l'application
             */
    	public void onCreate() {
    		super.onCreate();
    		MonApp.context 		= getApplicationContext();
    	}
     
    	/**
             * Retourne le context de l'application
             * @return Context de l'application
             */
    	public static Context getContext()
    	{
    		return MonApp.context;
    	}
    }
    Du coup quand on se trouve dans une classe qui à son propre contexte (activity par exemple) tu utilises this et quand tu es dans une autre classe qui à besoin du contexte de l'appli tu fais : MonApp.getContext().

    Le BaseContext ne s'utilise pas (jamais vu personne l'utiliser) et c'est même déconseillé à priori : https://groups.google.com/forum/#!to...rs/2-XxjT26mqk.

    Tu peux également lire cet article sur les fuites mémoire lié au context : http://android-developers.blogspot.f...ory-leaks.html
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2012
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 124
    Par défaut
    Citation Envoyé par grunk Voir le message
    Concrètement il y'a 2 types de contexte :

    Le contexte de l'application , qui existe tant que l'application existe
    La contexte d'activity qui lui peut disparaitre en même temps qu'une activity

    Dans une activité pour le contexte tu utiliseras this.
    Pour du code qui doit vivre tout au long d'une application tu utiliseras getApplicationContext().
    Pour les Service et BroadcastReceiver tu utilises leur propre contexte

    Ce que j'aime bien faire c'est faire une classe qui dérive d'Application et qui permet de récupérer le contexte de l'application simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    public class MonApp extends Application {
     
    	/** Context de l'application */
    	private static Context context;
     
    	/**
             * Lancement de l'application
             */
    	public void onCreate() {
    		super.onCreate();
    		MonApp.context 		= getApplicationContext();
    	}
     
    	/**
             * Retourne le context de l'application
             * @return Context de l'application
             */
    	public static Context getContext()
    	{
    		return MonApp.context;
    	}
    }
    Du coup quand on se trouve dans une classe qui à son propre contexte (activity par exemple) tu utilises this et quand tu es dans une autre classe qui à besoin du contexte de l'appli tu fais : MonApp.getContext().

    Le BaseContext ne s'utilise pas (jamais vu personne l'utiliser) et c'est même déconseillé à priori : https://groups.google.com/forum/#!to...rs/2-XxjT26mqk.

    Tu peux également lire cet article sur les fuites mémoire lié au context : http://android-developers.blogspot.f...ory-leaks.html
    Merci mais du coup pour le getContext() ca permet quoi ? Et le getBaseContext() ?

  4. #4
    Expert confirmé

    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
    Billets dans le blog
    3
    Par défaut
    Un Context permet plein de choses:
    * L'accès aux ressources (getDrawable(...) ...)
    * L'accès aux propriétés de l'application (et par là aux startActivity / etc... )
    * L'accès aux File-System (et par là aux databases SQLite, SharedPrerences, etc...)
    * L'accès aux permissions

    A chaque niveau, le context peut "surcharger" des fonctionalités.

    Par exemple, au niveau de l'application on n'aura pas de "thème", et on sera donc incapable de faire un "inflate" correct de views à partir du contexte obtenu depuis une application.
    Alors qu'une base de données peut très bien n'utiliser que le contexte de l'application.


    Maintenant il est *très* rare d'avoir besoin du contexte de l'application, et tout l'interêt du système est justement de pouvoir surcharger à tout moment.

    De toute manière, dès qu'on est dans une activité, ou un service, c'est "this" qu'il faut utiliser, point barre. La fonction getApplicationContext() n'y est que pour référence (et parce que l'a classe abstraite "Context" la définie).
    Et la fonction getBaseContext() n'est disponible que parce que Activity (ou Service) hérite de ContextWrapper (il y a d'ailleurs de forte chances pour que getBaseContext() d'une activité soit équivalent à getApplicationContext() ).

    En prime, dans une activité, il suffit d'appeler getApplication() pour avoir le context de l'application puisque Application *est un* context. (d'ailleurs je pense que getApplicationContext() renvoi la même référence que getApplication()).

    Mais dans tous les cas, Activity *est un* context, et à priori, c'est ce context que devrait utiliser tout objet créé par l'Activity.
    (tout comme Application *est un* context, et à priori, c'est ce context que devrait utiliser tout objet créé par l'Application)
    getBaseContext() ne devrait jamais être utilisé, trop dépendant de l'implémentation.

  5. #5
    Nouveau candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2018
    Messages : 2
    Par défaut
    svp quelq'un peut me dire a quoi sert la fonction getContext() dans android

Discussions similaires

  1. Réponses: 4
    Dernier message: 28/05/2014, 13h26
  2. Problème ExecAndWait et ActionContext.getContext()
    Par Invité dans le forum Struts 1
    Réponses: 1
    Dernier message: 06/11/2013, 16h58
  3. [API HTML5] getContext() n'est pas défini
    Par Floyus dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 02/05/2013, 03h45
  4. difference entre this et getApplicationContext
    Par jojo_ol76 dans le forum Android
    Réponses: 1
    Dernier message: 07/06/2011, 17h44
  5. HttpListener timeout sur getcontext
    Par Sp4ce dans le forum C#
    Réponses: 1
    Dernier message: 19/09/2008, 15h40

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