2 votes

Android - comment concevoir et instancier correctement des classes en dehors de l'activité afin d'accéder à ctx/activité ?

Mes applications deviennent grandes.

Afin de le rendre robuste, j'ai décidé de le diviser en classes distinctes en dehors de l'activité, chacune représentant un ensemble de fonctionnalités de l'activité.

Le problème est que j'ai souvent besoin de variables de contexte/activité dans ces classes.

Ce qui crée une confusion pour moi :

Dois-je "étendre" la classe MainActivity et utiliser les méthodes de récupération du contexte/de l'activité de parents(), ou dois-je instancier chacune des classes avec des variables de contexte/d'activité comme ceci :

static private BrowseHandler instance;

static public void init(Context ctx, FragmentActivity ac) {
    if (null==instance) {
        instance = new BrowseHandler(ctx, ac);
    }
}
static public BrowseHandler getInstance() {
    return instance;
}

Quelle est la meilleure approche ?

Ou peut-être, n'ai-je pas compris l'essentiel ? Devrais-je garder le code de mes activités à l'intérieur de mon activité ?

2voto

ben75 Points 11322

Ne mettez pas le Context dans un champ statique. Une variable statique est partagée par toutes les instances de la classe, donc mettre le contexte dans une variable statique réduit la réutilisabilité de votre classe puisqu'elle ne sera utilisable que dans un seul contexte. (le contexte qui a été utilisé pour iniatialiser le champ statique).

Au lieu de cela, passez le contexte comme un argument de méthode lorsque vous appelez du code qui n'est pas dans une activité.

En ce qui concerne votre idée d'étendre la MainActivity... cela semble être un modèle étrange. Comment allez-vous l'instancier ?

new MyExtendedMainActivity(this);

Il n'y a pas de réelle valeur ajoutée à étendre MainActivity. Il n'y a qu'un seul inconvénient : vous ne pouvez pas étendre quelque chose d'autre. De plus, vous aurez des objets Activity qui ne sont pas gérés par l'OS Android. Rappelez-vous que dans Android vous n'instanciez jamais une activité vous-même : le framework Android le fait pour vous et vous n'avez que des callbacks pour la configurer.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X