シングルトンクラスからアプリケーションリソース(特定の文字列リソース)にアクセスしようとしています。 Singletonなので、このクラスは(メモリリークを防ぐために)Contextオブジェクトへの参照を保持することはできません。静的参照を使用しないコンテキストの使用
- アプリケーションクラスで静的コンテキストを作成し、アプリケーション全体で使用します。ネット上で他の実装を探していました。
- コンテキストを必要なメソッドのパラメータとして渡します。
私はContextオブジェクトへの静的参照を使用するので、拳1を使いたくありません。私はそれがアンドロイドのアプリケーションクラスで静的に持っていても大丈夫だと理解していますが、それでもハックのように見えます。
シングルトンのsomeOtherMethodに渡すことのできるコンテキストのインスタンスがないため、2番目の実装は役に立ちません。
私はシングルトンのインスタンスを初期化するときに、シングルトンのインスタンスを初期化するときに、シングルトンのアブストラクトをメソッドの必要性をオーバーライドするように実装しました(例:getString(int resId)
)。
これでメモリリークが発生する可能性があるのかどうか不思議です。私はこのアプローチと混同しています
:
- オーバーライドgetString
のコンテキストへ>参照が最終です。メモリリークの原因になるかどうかはわかりません。
public abstract class SingletonClass{
.
.
.
private static SingletonClass sInstance;
private SingletonClass(Context paramContext) {
// constructor code
}
public static SingletonClass getInstance(final Context context) {
if (sInstance == null) {
sInstance = new SingletonClass(context){
@Override
public String getString(int resId) {
return context.getString(resId);
}
};
}
return sInstance;
}
public abstract String getString(int resId);
.
.
.
private void someOtherMethod(){
//uses above getString()
}
}
これらの文字列をどのように使用しているかを共有できますか。具体的には、使用するときに「コンテキスト」を持たないのはなぜですか?ほとんどの場合、Activity/Service/BroadcastReceiver/SQLiteOpenHelper /などがコンテキストを提供し、シングルトンをいくらか不要にします。 – chessdork
アンドロイドゲームでGoogle Playゲームサービスを使用しています。私は単一のGoogleApiClientをアプリ全体に保持する必要があるので、シングルトンを考えました。 –