Clean the slice in onUnpinned rather than onBinded.

Change-Id: Idda7cbedb0ce7b0ec83fc2f11a2505634d2b465c
Bug: 249101421
This commit is contained in:
Xuanang Zhao
2022-10-11 16:03:10 +08:00
parent fcf10fa0a5
commit 98f7b2b227

View File

@@ -187,6 +187,7 @@ public class SettingsSliceProvider extends SliceProvider {
@Override @Override
public void onSliceUnpinned(Uri sliceUri) { public void onSliceUnpinned(Uri sliceUri) {
mSliceWeakDataCache.remove(sliceUri);
final Context context = getContext(); final Context context = getContext();
if (!VolumeSliceHelper.unregisterUri(context, sliceUri)) { if (!VolumeSliceHelper.unregisterUri(context, sliceUri)) {
SliceBroadcastRelay.unregisterReceivers(context, sliceUri); SliceBroadcastRelay.unregisterReceivers(context, sliceUri);
@@ -258,11 +259,6 @@ public class SettingsSliceProvider extends SliceProvider {
loadSliceInBackground(sliceUri); loadSliceInBackground(sliceUri);
return getSliceStub(sliceUri); return getSliceStub(sliceUri);
} }
// Remove the SliceData from the cache after it has been used to prevent a memory-leak.
if (!getPinnedSlices().contains(sliceUri)) {
mSliceWeakDataCache.remove(sliceUri);
}
return SliceBuilderUtils.buildSlice(getContext(), cachedSliceData); return SliceBuilderUtils.buildSlice(getContext(), cachedSliceData);
} finally { } finally {
StrictMode.setThreadPolicy(oldPolicy); StrictMode.setThreadPolicy(oldPolicy);