0
\$\begingroup\$

I use this code to get values from SharedPreferences.

public static String getSharedPreferenceValue(Context context, String key) {
    SharedPreferences sp = context.getSharedPreferences(
    Utility.PREFERENCES_NAME, Context.MODE_PRIVATE);
    String value = sp.getString(key, Utility.EMPTY_STRING);
    return value;
}

Will this static method keep context (Activity) all time and are there memory leaks?

Is there a better way to get values from SharedPreferences? I'm looking for the best way to do this.

\$\endgroup\$
1

1 Answer 1

2
\$\begingroup\$

Will this static method keep context (Activity) all time and are there memory leaks?

A memory leak in Java is a situation where some objects are not used by application any more, but GC fails to recognize them as unused. As a result, these objects remain in memory indefinitely reducing the amount of memory available to the application.

Will this static method keep context (Activity)

SharedPreference could fail:

Unlike commit(), which writes its preferences out to persistent storage synchronously, apply() commits its changes to the in-memory SharedPreferences immediately but starts an asynchronous commit to disk and you won't be notified of any failures. If another editor on this SharedPreferences does a regular commit() while a apply() is still outstanding, the commit() will block until all async commits are completed as well as the commit itself.

http://developer.android.com/reference/android/content/SharedPreferences.Editor.html

Are there memory leaks ?

No.

Is there a better way to get values from SharedPreferences? I'm looking for the best way to do this.

SharedPreferences - Best method

Java provides many ways of storing application data. One of those ways leads us to the SharedPreferences object which is used to store private primitive data in key-value pairs.

All logic are based only on three simple classes:

  • SharedPreferences

  • SharedPreferences.Editor

  • SharedPreferences.OnSharedPreferenceChangeListener

SharedPreferences

SharedPreferences is main of them. It's responsible for getting (parsing) stored data, provides interface for getting Editor object and interfaces for adding and removing OnSharedPreferenceChangeListener

  • To create SharedPreferences you will need Context object (can be an application Context)

  • getSharedPreferences method parses Preference file and creates Map object for it

  • You can create it in few modes provided by Context, it's strongly recommended to use MODE_PRIVATE because creating world-readable/writable files is very dangerous, and likely to cause security holes in applications.

Editor

SharedPreferences.Editor is an Interface used for modifying values in a SharedPreferences object. All changes you make in an editor are batched, and not copied back to the original SharedPreferences until you call commit() or apply()

  • Use simple interface to put values in Editor
  • Save values synchronous with commit() or asynchronous with apply which is faster. In fact of using different threads using commit() is safer. Thats why I prefer to use commit().
  • Remove single value with remove() or clear all values with clear()

Performance & Tips

  • SharedPreferences is a Singleton object so you can easily get as many references as you want, it opens file only when you call getSharedPreferences first time, or create only one reference for it.

  • As SharedPreferences is a Singleton object you can change any of It's instances and not be scared that their data will be different

  • Remember the larger the Preference object is the longer get, commit, apply, remove and clear operations will be. So it's highly recommended to separate your data in different small objects.

  • Your Preferences won't be removed after Application update. So there are cases when you need to create some migration scheme. For example you have Application that parse local JSON in start of application, to do this only after first start you decided to save boolean flag wasLocalDataLoaded. After some time you updated that JSON and released new application version. Users will update their applications but they will not load new JSON because they already done it in first application version.

  • SharedPreferences are stored in an xml file in the app data folder

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.