Fix the exception of accessing an ArrayMap
- ArrayMap is not thread-safe.
- When accessing the map across threads at the same time, the map may
throw a ConcurrentModificationException.
- Convert the map to a synchronizedMap to avoid the exception.
Fixes: 159813482
Test: robotest
Change-Id: I3b8bdd435c7c546acf736fa8aafd2ceaed94d081
diff --git a/src/com/android/settings/slices/SliceBackgroundWorker.java b/src/com/android/settings/slices/SliceBackgroundWorker.java
index 6eb154e..2b02999 100644
--- a/src/com/android/settings/slices/SliceBackgroundWorker.java
+++ b/src/com/android/settings/slices/SliceBackgroundWorker.java
@@ -33,6 +33,7 @@
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import java.util.Map;
@@ -190,7 +191,8 @@
private static NotifySliceChangeHandler sHandler;
- private final Map<Uri, Long> mLastUpdateTimeLookup = new ArrayMap<>();
+ private final Map<Uri, Long> mLastUpdateTimeLookup = Collections.synchronizedMap(
+ new ArrayMap<>());
private static NotifySliceChangeHandler getInstance() {
if (sHandler == null) {