From 2b80ab7d72b1805135ba3e0970550b99cabe3468 Mon Sep 17 00:00:00 2001 From: Daniel Nishi Date: Tue, 4 Apr 2017 12:50:14 -0700 Subject: [PATCH] Don't crash in background after app uninstall. It's possible for an app to be uninstalled during a LOAD_SIZES phase of the ApplicationsState measurement. By catching the IllegalStateException which is thrown, we can continue without crashing. Change-Id: I9aae8928dc7205c52f61d09345d5226e7bd07f49 Fixes: 36845611 Test: Manual --- .../applications/ApplicationsState.java | 29 ++++++++++++++-------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/packages/SettingsLib/src/com/android/settingslib/applications/ApplicationsState.java b/packages/SettingsLib/src/com/android/settingslib/applications/ApplicationsState.java index 8833fb8cab53..dcda933d7900 100644 --- a/packages/SettingsLib/src/com/android/settingslib/applications/ApplicationsState.java +++ b/packages/SettingsLib/src/com/android/settingslib/applications/ApplicationsState.java @@ -984,18 +984,27 @@ public class ApplicationsState { mCurComputingSizeUserId = UserHandle.getUserId(entry.info.uid); mBackgroundHandler.post(() -> { - final StorageStats stats = mStats.queryStatsForPackage( - mCurComputingSizeUuid, mCurComputingSizePkg, - UserHandle.of(mCurComputingSizeUserId)); - final PackageStats legacyStats = new PackageStats( - mCurComputingSizePkg, mCurComputingSizeUserId); - legacyStats.codeSize = stats.getCodeBytes(); - legacyStats.dataSize = stats.getDataBytes(); - legacyStats.cacheSize = stats.getCacheBytes(); try { - mStatsObserver.onGetStatsCompleted(legacyStats, true); - } catch (RemoteException ignored) { + final StorageStats stats = mStats.queryStatsForPackage( + mCurComputingSizeUuid, mCurComputingSizePkg, + UserHandle.of(mCurComputingSizeUserId)); + final PackageStats legacyStats = new PackageStats( + mCurComputingSizePkg, mCurComputingSizeUserId); + legacyStats.codeSize = stats.getCodeBytes(); + legacyStats.dataSize = stats.getDataBytes(); + legacyStats.cacheSize = stats.getCacheBytes(); + try { + mStatsObserver.onGetStatsCompleted(legacyStats, true); + } catch (RemoteException ignored) { + } + } catch (IllegalStateException e) { + Log.e(TAG,"An exception occurred while fetching app size", e); + try { + mStatsObserver.onGetStatsCompleted(null, false); + } catch (RemoteException ignored) { + } } + }); } if (DEBUG_LOCKING) Log.v(TAG, "MSG_LOAD_SIZES releasing: now computing"); -- 2.11.0