web-dev-qa-db-fra.com

Meilleure pratique pour transmettre le contexte à des classes hors activité?

Donc, ma première application majeure est presque codée et je fais des optimisations sur mon code. L'application fonctionne bien, mais je ne suis pas sûr de ma façon de passer le contexte à d'autres classes. Je ne veux pas le faire de la mauvaise façon. Je suis tombé sur des articles et des questions ici dans Stackoverflow sur les contextes et quelle est la bonne façon de le transmettre aux classes non actives. J'ai également lu la documentation, mais être un Finnois rend la technologie compliquée encore plus difficile à comprendre.

Donc, une question simple. Ma façon de transmettre le contexte de mon activité principale à d'autres classes (auxiliaires) est-elle correcte? Sinon, où puis-je en savoir plus sur les meilleures pratiques dans ces situations.

Par exemple: MainActivity.Java

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle sis){
        super(sis);
        new Helper(MyActivity.this).makeMyAppAwesome();
    }
}

Helper.Java

public class Helper {
    Context context;
    Helper(Context ctx){
        this.context = ctx;
    }

    public void makeMyAppAwesome(){
        makeBaconAndEggsWithMeltedCheese(context);
    }
}

Est-ce correct? Ce serait bien si quelqu'un pouvait fournir un article facile à lire avec des exemples à ce sujet.

49
Iiro Krankka

Vous pouvez le faire en utilisant ContextWrapper, comme décrit ici.

Par exemple:

public class MyContextWrapper extends ContextWrapper {

    public MyContextWrapper(Context base) {
      super(base);
   }

    public void makeMyAppAwesome(){
        makeBaconAndEggsWithMeltedCheese(this);
    }
}

Et appelez la classe non-activité comme celle-ci à partir d'une activité

new MyContextWrapper(this);
37
ET-CS

Il est généralement dans votre intérêt de simplement passer le contexte actuel au moment où cela est nécessaire. Le stockage dans une variable membre entraînera probablement une fuite de mémoire et commencera à provoquer des problèmes à mesure que vous développez plus d'activités et de services dans votre application.

public void iNeedContext(Context context) {...

De plus, dans toute classe ayant un contexte, je recommanderais de créer une variable membre pour la lisibilité et la recherche, plutôt que de passer directement ou (ClassName.)this. Par exemple dans MainActivity.Java:

Context mContext = MainActivity.this;
Activity mActivity = MainActivity.this;
1
Gibolt