web-dev-qa-db-fra.com

Quel est le rôle de attachBaseContext?

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.

7
harsh sidana

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.

6
Hemant Parmar

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

3
Neeraj Sewani