1

Android アプリに Convert や Utils などのヘルパー クラスが必要です。私が持っている典型的な問題は次のとおりです。

public class Convert {

    private Convert() {
        // I can't be instantiated
    }

    public static int pxToDp(float pixels) {
        DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, pixels, displayMetrics);
    }
}

Convert は getResources() が何かわからないため、上記はもちろん失敗します。したがって、2つのオプションが残ります。

  1. ゴミであるヘルパーメソッドを使用するたびにコンテキストを渡します
  2. アプリケーションをサブクラス化し、マニフェストを変更してから、次のように参照を作成します。

    public class App extends Application {
    
        private static Context mContext;
    
        @Override
        public void onCreate() {
            super.onCreate();
            mContext = this;
        }
    
        public static Context getContext() {
            return mContext;
        }
    }
    

それからApp.getContext()私がそれを必要とするすべてのことをします。

質問: これは正しくないはずです。エレガントな進め方は何ですか?

4

2 に答える 2

5

Application を subllcass する場合、それは明らかに機能しますが、無関係な処理を大量に実行する巨大で恐ろしいクラスになってしまう可能性があります。

はい、Context をユーティリティ クラスに渡すのは少し面倒で面倒ですが、ユーティリティの各タイプ (StringUtils など) ごとにクラスを作成し、少なくとも責任を分けておくことができます。

すべてのユーティリティ クラスが App に依存することになり、再利用が難しくなるため、どこでも App.getContext を使用しないことをお勧めします。コンテキストを渡すと、一部のユーティリティ クラスを他のアプリで簡単に再利用できます。

したがって、別のクラスを使用し、そのコンテキストをメソッドに渡すと思います。少し醜いですが、私の意見では、他の選択肢よりもはるかに醜くありません。

于 2012-04-13T15:22:06.663 に答える