From 2a10196bc5dd13eceac4da1cd27f7c9117b4647d Mon Sep 17 00:00:00 2001 From: Julian Winkler Date: Sat, 15 Jun 2024 00:01:51 +0200 Subject: [PATCH] Context: cache SharedPreferences OsmAnd renderer reads SharedPreferences for every frame. Use cached objects instead of reading it from disk every time --- src/api-impl/android/content/Context.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/api-impl/android/content/Context.java b/src/api-impl/android/content/Context.java index e62a4bb6..28704792 100644 --- a/src/api-impl/android/content/Context.java +++ b/src/api-impl/android/content/Context.java @@ -385,10 +385,18 @@ public class Context extends Object { return makeFilename(getPreferencesDir(), name + ".xml"); } + private static Map sharedPrefs = new HashMap(); + public SharedPreferences getSharedPreferences(String name, int mode) { Slog.v(TAG, "\n\n...> getSharedPreferences(" + name + ")\n\n"); - File prefsFile = getSharedPrefsFile(name); - return new SharedPreferencesImpl(prefsFile, mode); + if (sharedPrefs.containsKey(name)) { + return sharedPrefs.get(name); + } else { + File prefsFile = getSharedPrefsFile(name); + SharedPreferences prefs = new SharedPreferencesImpl(prefsFile, mode); + sharedPrefs.put(name, prefs); + return prefs; + } } public ClassLoader getClassLoader() {