30 votes

Android - Besoin de contexte dans les classes hors activité

J'ai des classes dans mon application qui doivent appeler des fonctions Android qui nécessitent le contexte comme paramètre. Je ne l'ai pas car la classe n'est pas une sous-classe de la classe Activity.

Quelle est la bonne façon de résoudre ce problème?

  1. Passez-le comme paramètre à chaque appel?
  2. Passer à l'instanciation de la classe et le garder?

25voto

Maxim Points 2486

Cela dépend du rôle de la classe. Mais de toute façon, passez ApplicationContext mais pas l'activité 1. Si vous passez le contexte d'activité, gc ne peut pas le supprimer de la mémoire lorsque vous n'avez plus besoin d'activité. Mais le contexte de l' application est utilisée alors que l' application n'a pas été terminé par OS.Refer Évitez la mémoire Fuites

11voto

Mark Mooibroek Points 4608

Passez-le comme paramètre. Ou mieux encore, obtenez le contexte de l'application pour éviter les fuites de mémoire.

 public class Example {
    protected Context context;

    public Example(Context context){
        this.context = context.getApplicationContext();
    }
}
 

10voto

Octavian Damiean Points 20620

Je suis quasiment toujours avec un paramètre de constructeur approche. Je le passe dans l'instanciation et de garder une référence privée dans le instancié de la classe.

Vous devez penser à une chose importante. Si la classe que vous passer à l' Context existera plus que l' Activity de son instanciation, alors vous devriez utiliser le contexte de l'application. Si cette classe est de faire des trucs de l'INTERFACE utilisateur, vous aurez besoin d'un contexte d'activité.

Assurez-vous que la classe que vous passez un contexte d'activité pour ne durera pas plus longtemps que l' Activity ou vous allez à la fuite de l'ensemble de l'activité.

Si vous ne le faites pas des éléments d'INTERFACE utilisateur puis aller avec le contexte de l'application.

3voto

ccheneson Points 24031

Passez-le à l'instanciation de la classe et conservez-le.

Un exemple typique est lorsque vous créez un assistant db. Voir ce lien

2voto

Aracem Points 3331

Je le passe en paramètre, je pense que c'est sa meilleure forme pour le faire

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