3
私は、アプリケーションの共有設定を扱うクラスを構築しています。私は、プロジェクトのすべての部分からシングルトンにアクセスしたいと思っています。クラスが機能するためにコンテキストを渡す必要があるため、通常のgetInstanceメソッドを使用することはできません。私はMainActivity.javaでコンテキストを渡すことを考えていました。メモリリークがありますか?コンテキストとしてのシングルトンが変数として - メモリリーク?
これが私の現在のソリューションです:あなたが唯一のgetApplicationContext()
を呼び出すことにより、アプリケーションコンテキストへの参照を維持しているので、あなたは、リークを作成しません
public class LocalStorage {
private Context context;
private static LocalStorage instance = null;
protected LocalStorage() {
// Exists only to defeat instantiation.
}
public static LocalStorage getInstance() {
if(instance == null) {
instance = new LocalStorage();
}
return instance;
}
public static LocalStorage getInstance(Context _context) {
LocalStorage localStorage = getInstance();
localStorage.context = _context.getApplicationContext();
return localStorage;
}
private SharedPreferences sharedPreferences() {
return context.getSharedPreferences("mySettings", Context.MODE_PRIVATE);
}
....
ありがとうございました。コードサンプルに関して、これは私がいつもgetInstanceでコンテキストを提供する必要があることを意味します。私は一度だけそれをしたい。 – Guy
私は参照してください。問題が一度しか起こらない場合は、 'Context'を与えない他の' getInstance() '呼び出しの前にコードが最初に実行されることを保証しなければなりません。そうでないと、' Context'なしでシングルトンを初期化します。それはエラーが起こりやすい。あなたが必要とするときはいつも、 'Context'にアクセスするのは一般的に問題ではありません。特にアプリケーションのコンテキスト。 –
アプリケーションクラスのonCreateメソッドでシングルトンのコンテキストを設定する方法はありますか?それは常に最初に実行されませんか?そうする際に注意すべき点はありますか? – Guy