diff --git a/core/java/android/app/ResourcesManager.java b/core/java/android/app/ResourcesManager.java index d275c8336251d..322176100e926 100644 --- a/core/java/android/app/ResourcesManager.java +++ b/core/java/android/app/ResourcesManager.java @@ -305,9 +305,13 @@ public class ResourcesManager { for (int i = mCachedApkAssets.size() - 1; i >= 0; i--) { final ApkKey key = mCachedApkAssets.keyAt(i); if (key.path.equals(path)) { - WeakReference apkAssetsRef = mCachedApkAssets.removeAt(i); - if (apkAssetsRef != null && apkAssetsRef.get() != null) { - apkAssetsRef.get().close(); + final WeakReference apkAssetsRef = mCachedApkAssets.removeAt(i); + if (apkAssetsRef == null) { + continue; + } + final ApkAssets apkAssets = apkAssetsRef.get(); + if (apkAssets != null) { + apkAssets.close(); } } } @@ -446,16 +450,14 @@ public class ResourcesManager { ApkAssets apkAssets; // Optimistically check if this ApkAssets exists somewhere else. + final WeakReference apkAssetsRef; synchronized (mLock) { - final WeakReference apkAssetsRef = mCachedApkAssets.get(key); - if (apkAssetsRef != null) { - apkAssets = apkAssetsRef.get(); - if (apkAssets != null && apkAssets.isUpToDate()) { - return apkAssets; - } else { - // Clean up the reference. - mCachedApkAssets.remove(key); - } + apkAssetsRef = mCachedApkAssets.get(key); + } + if (apkAssetsRef != null) { + apkAssets = apkAssetsRef.get(); + if (apkAssets != null && apkAssets.isUpToDate()) { + return apkAssets; } }