いいえ、アプリケーションコンテキストを使用するとメモリリークは発生しません。シングルトンとしてSharedPrefsManager
を作成し、Application
クラスから初期化します。あなたは、コンテキストなしで他のクラスから使用できるように、あなたはこの、
public class StackApp extends Application {
@Override
public void onCreate() {
super.onCreate();
SharedPrefsManager.init(this);
}
}
のように初期化することができ、このようなアプリケーションクラスから
public class SharedPrefsManager {
private static SharedPrefsManager mInstance= null;
private SharedPreferences sharedPreferences;
private SharedPreferences.Editor prefsEditor;
private SharedPrefsManager(Context context) {
sharedPreferences = context.getSharedPreferences(context.getPackageName(), Activity.MODE_PRIVATE);
prefsEditor = sharedPreferences.edit();
}
public static void init(Context context) {
mInstance = new SharedPrefsManager(context);
}
public static SharedPrefsManager getInstance() {
if (mInstance == null) {
throw new RuntimeException(
"Must run init(Application application) before an instance can be obtained");
}
return mInstance;
}
/**
* To get the Stored string value in Preference.
*
* @param key
* @param defaultvalue
* @return stored string value.
*/
public String getStringValue(final String key, final String defaultvalue) {
return sharedPreferences.getString(key, defaultvalue);
}
/**
* To store the string value in prefernce.
*
* @param key
* @param value
*/
public void setStringValue(final String key, final String value) {
prefsEditor.putString(key, value);
prefsEditor.commit();
}
}
を作成して任意の場所に
からアクセスできるようにします。 例:あなたはこのように使用することができ、
SharedPrefsManager.getInstance().setStringValue("key", "value");
の事ならば、なぜあなたはクラスのインスタンスが必要になるが含まれていないため、静的フィールドに
SharedPreferences
を保持するメモリリークを引き起こしませんあなたはそれに '静的な'もあります。 'SharedPreferences'を非静的にします。 – Vuckoアプリケーションのコンテキストは、アプリケーションが生存していて、アクティビティのライフサイクルに依存しないので、このケースではメモリリークが発生しない限り存続します –