diff options
| -rw-r--r-- | telephony/java/android/telephony/SubscriptionManager.java | 44 |
1 files changed, 12 insertions, 32 deletions
diff --git a/telephony/java/android/telephony/SubscriptionManager.java b/telephony/java/android/telephony/SubscriptionManager.java index 0af973a2f627..040c5b013c6a 100644 --- a/telephony/java/android/telephony/SubscriptionManager.java +++ b/telephony/java/android/telephony/SubscriptionManager.java @@ -85,11 +85,11 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; -import java.util.LinkedHashMap; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Objects; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.Executor; import java.util.function.Consumer; import java.util.stream.Collectors; @@ -1318,24 +1318,10 @@ public class SubscriptionManager { private final Context mContext; - /** - * In order to prevent the overflow of the heap size due to an indiscriminate increase in the - * cache, the heap size of the resource cache is set sufficiently large. - */ - private static final int MAX_RESOURCE_CACHE_ENTRY_COUNT = 10_000; - - /** - * Cache of Resources that has been created in getResourcesForSubId. Key contains package name, - * and Configuration of Resources. If more than the maximum number of resources are stored in - * this cache, the least recently used Resources will be removed to maintain the maximum size. - */ - private static final Map<Pair<String, Configuration>, Resources> sResourcesCache = - Collections.synchronizedMap(new LinkedHashMap<>(16, 0.75f, true) { - @Override - protected boolean removeEldestEntry(Entry eldest) { - return size() > MAX_RESOURCE_CACHE_ENTRY_COUNT; - } - }); + // Cache of Resource that has been created in getResourcesForSubId. Key is a Pair containing + // the Context and subId. + private static final Map<Pair<Context, Integer>, Resources> sResourcesCache = + new ConcurrentHashMap<>(); /** * A listener class for monitoring changes to {@link SubscriptionInfo} records. @@ -2821,20 +2807,14 @@ public class SubscriptionManager { @NonNull public static Resources getResourcesForSubId(Context context, int subId, boolean useRootLocale) { - // Check if the Resources already exists in the cache based on the given context. Find a - // Resource that match Configuration. - Pair<String, Configuration> cacheKey = null; - if (isValidSubscriptionId(subId)) { - Configuration configurationKey = - new Configuration(context.getResources().getConfiguration()); - if (useRootLocale) { - configurationKey.setLocale(Locale.ROOT); - } - cacheKey = Pair.create(context.getPackageName(), configurationKey); - Resources cached = sResourcesCache.get(cacheKey); - if (cached != null) { + // Check if resources for this context and subId already exist in the resource cache. + // Resources that use the root locale are not cached. + Pair<Context, Integer> cacheKey = null; + if (isValidSubscriptionId(subId) && !useRootLocale) { + cacheKey = Pair.create(context, subId); + if (sResourcesCache.containsKey(cacheKey)) { // Cache hit. Use cached Resources. - return cached; + return sResourcesCache.get(cacheKey); } } |