diff options
| author | Christopher Tate <ctate@google.com> | 2016-04-21 15:05:34 -0700 |
|---|---|---|
| committer | Christopher Tate <ctate@google.com> | 2016-04-21 15:05:34 -0700 |
| commit | d0cca79f3c438f6db28603dc50bfa44d48461728 (patch) | |
| tree | 7a96171b5290608db3e8eb2f7920071327b674d8 /core/java/android/app/AlarmManager.java | |
| parent | 665189f92646d34bf02082120cba3c62aa718770 (diff) | |
Don't worry about an extra weak indirection with callback alarms
Bug 27995384
Change-Id: Ie9cf3e05dca4af7085b479fb65d4cf45ee0239ba
Diffstat (limited to 'core/java/android/app/AlarmManager.java')
| -rw-r--r-- | core/java/android/app/AlarmManager.java | 26 |
1 files changed, 7 insertions, 19 deletions
diff --git a/core/java/android/app/AlarmManager.java b/core/java/android/app/AlarmManager.java index e4fff9dc8a8c..02dcc5c7e3bd 100644 --- a/core/java/android/app/AlarmManager.java +++ b/core/java/android/app/AlarmManager.java @@ -33,7 +33,6 @@ import android.util.Log; import libcore.util.ZoneInfoDB; import java.io.IOException; -import java.lang.ref.WeakReference; import java.util.WeakHashMap; /** @@ -245,12 +244,7 @@ public class AlarmManager { // Tracking of the OnAlarmListener -> wrapper mapping, for cancel() support. // Access is synchronized on the AlarmManager class object. - // - // These are weak references so that we don't leak listener references if, for - // example, the pending-alarm messages are posted to a HandlerThread that is - // disposed of prior to alarm delivery. The underlying messages will be GC'd - // but this static reference would still persist, orphaned, never deallocated. - private static WeakHashMap<OnAlarmListener, WeakReference<ListenerWrapper>> sWrappers; + private static WeakHashMap<OnAlarmListener, ListenerWrapper> sWrappers; /** * package private on purpose @@ -637,16 +631,14 @@ public class AlarmManager { if (listener != null) { synchronized (AlarmManager.class) { if (sWrappers == null) { - sWrappers = new WeakHashMap<OnAlarmListener, WeakReference<ListenerWrapper>>(); + sWrappers = new WeakHashMap<OnAlarmListener, ListenerWrapper>(); } - WeakReference<ListenerWrapper> wrapperRef = sWrappers.get(listener); - // no existing wrapper *or* we've lost our weak ref to it => build a new one - if (wrapperRef == null || - (recipientWrapper = wrapperRef.get()) == null) { + recipientWrapper = sWrappers.get(listener); + // no existing wrapper => build a new one + if (recipientWrapper == null) { recipientWrapper = new ListenerWrapper(listener); - wrapperRef = new WeakReference<ListenerWrapper>(recipientWrapper); - sWrappers.put(listener, wrapperRef); + sWrappers.put(listener, recipientWrapper); } } @@ -906,11 +898,7 @@ public class AlarmManager { ListenerWrapper wrapper = null; synchronized (AlarmManager.class) { if (sWrappers != null) { - final WeakReference<ListenerWrapper> wrapperRef; - wrapperRef = sWrappers.get(listener); - if (wrapperRef != null) { - wrapper = wrapperRef.get(); - } + wrapper = sWrappers.get(listener); } } |
