Don't bother with WeakHashMap for direct alarm bookkeeping
Call cancel() explicitly before dropping local references to your
callback objects; they won't just quietly go away.
Bug 28987260
Change-Id: Id9da66ed86a46b4fb38127e2ddd7a7d84fd2313a
diff --git a/core/java/android/app/AlarmManager.java b/core/java/android/app/AlarmManager.java
index 02dcc5c..2ae437e 100644
--- a/core/java/android/app/AlarmManager.java
+++ b/core/java/android/app/AlarmManager.java
@@ -28,12 +28,12 @@
import android.os.UserHandle;
import android.os.WorkSource;
import android.text.TextUtils;
+import android.util.ArrayMap;
import android.util.Log;
import libcore.util.ZoneInfoDB;
import java.io.IOException;
-import java.util.WeakHashMap;
/**
* This class provides access to the system alarm services. These allow you
@@ -244,7 +244,7 @@
// Tracking of the OnAlarmListener -> wrapper mapping, for cancel() support.
// Access is synchronized on the AlarmManager class object.
- private static WeakHashMap<OnAlarmListener, ListenerWrapper> sWrappers;
+ private static ArrayMap<OnAlarmListener, ListenerWrapper> sWrappers;
/**
* package private on purpose
@@ -631,7 +631,7 @@
if (listener != null) {
synchronized (AlarmManager.class) {
if (sWrappers == null) {
- sWrappers = new WeakHashMap<OnAlarmListener, ListenerWrapper>();
+ sWrappers = new ArrayMap<OnAlarmListener, ListenerWrapper>();
}
recipientWrapper = sWrappers.get(listener);