web-dev-qa-db-ja.com

コンテキストを非アクティビティクラスに渡すベストプラクティスですか?

したがって、私の最初の主要なアプリケーションはほとんどコーディングされており、コードの最適化を行っています。アプリは正常に動作しますが、コンテキストを他のクラスに渡す方法についてはわかりません。間違った方法でやりたくありません。ここでStackoverflowのコンテキストと、それを非アクティビティクラスに渡す正しい方法についての記事と質問を見つけました。私もドキュメントを読みましたが、フィンランド人であると、複雑な技術を話すのがさらに難しくなります。

簡単な質問です。メインアクティビティのコンテキストを他の(ヘルパー)クラスに渡す方法は正しいですか?そうでない場合、これらの状況でのより良い練習についてもっと読むことができます。

例: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);
    }
}

これでいい?誰かがこのテーマの例で読みやすい記事を提供できたらいいですね。

49
Iiro Krankka

ここで説明されているように、ContextWrapperを使用してそれを行うことができます。

例えば:

public class MyContextWrapper extends ContextWrapper {

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

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

そして、Activityからこのような非アクティビティクラスを呼び出します

new MyContextWrapper(this);
37
ET-CS

通常は、現在のコンテキストを必要なときに渡すだけでよいでしょう。メンバー変数に保存すると、メモリリークが発生する可能性が高くなり、アプリでアクティビティとサービスを増やすと問題が発生し始めます。

public void iNeedContext(Context context) {...

また、コンテキストを持つクラスでは、直接渡すまたは(ClassName.)thisではなく、可読性と検索性のためにメンバー変数を作成することをお勧めします。 MainActivity.Javaの例:

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