Je ne sais pas pourquoi utilisons-nous attachBaseContext dans Android. Ce serait d'une grande aide si quelqu'un pouvait m'expliquer la signification de la même chose.
La fonction attachBaseContext
de la classe ContextWrapper
s'assure que le contexte n'est attaché qu'une seule fois. ContextThemeWrapper
applique le thème de l'application ou de l'activité définie comme Android:theme
dans le AndroidManifest.xml
fichier. Comme l'application et le service n'ont pas besoin de thème, ils l'héritent directement de ContextWrapper
. Lors de la création d'activité, l'application et le service sont lancés, un nouvel objet ContextImpl
est créé à chaque fois et implémente des fonctions dans Context
.
public class ContextWrapper extends Context {
Context mBase;
public ContextWrapper(Context base) {
mBase = base;
}
/**
* Set the base context for this ContextWrapper. All calls will then be
* delegated to the base context. Throws
* IllegalStateException if a base context has already been set.
*
* @param base The new base context for this wrapper.
*/
protected void attachBaseContext(Context base) {
if (mBase != null) {
throw new IllegalStateException("Base context already set");
}
mBase = base;
}
}
Pour plus de détails, veuillez regarder ceci.
La classe ContextWrapper est utilisée pour encapsuler tout contexte ( contexte d'application, contexte d'activité ou contexte de base) dans le contexte d'origine sans le déranger. Prenons l'exemple ci-dessous:
override fun attachBaseContext(newBase: Context?) {
super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase))
}
Ici, newBase
est le contexte d'origine qui est enveloppé par la méthode CalligraphyContextWrapper
class 'wrap
qui retourne l'instance de la classe ContextWrapper
. Maintenant, le contexte modifié est passé à la ContextWrapper
qui est la superclasse indirecte de Activity en appelant super.attachBaseContext()
. Et maintenant, nous pouvons accéder au contexte de Dépendance de calligraphie ainsi qu'à notre contexte d'origine.
Fondamentalement, si vous souhaitez utiliser un autre contexte dans l'activité, l'application ou le service en cours, remplacez la méthode attachBaseContext
.
PS:
La calligraphie est juste une dépendance pour obtenir des polices personnalisées calligraphie
Vérifiez ceci pour en savoir plus sur les contextes plongez profondément dans le contexte
Le document officiel sur attachBaseContext
n'est pas complet mais vous aurez une idée provisoire à ce sujet . ContextWrapper