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
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
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 :
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().
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; } }
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
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.
svp quelq'un peut me dire a quoi sert la fonction getContext() dans android
Partager