Merge "Don't worry about an extra weak indirection with callback alarms" into nyc-dev

This commit is contained in:
Chris Tate
2016-04-22 00:40:42 +00:00
committed by Android (Google) Code Review

View File

@@ -33,7 +33,6 @@ import android.util.Log;
import libcore.util.ZoneInfoDB; import libcore.util.ZoneInfoDB;
import java.io.IOException; import java.io.IOException;
import java.lang.ref.WeakReference;
import java.util.WeakHashMap; import java.util.WeakHashMap;
/** /**
@@ -245,12 +244,7 @@ public class AlarmManager {
// Tracking of the OnAlarmListener -> wrapper mapping, for cancel() support. // Tracking of the OnAlarmListener -> wrapper mapping, for cancel() support.
// Access is synchronized on the AlarmManager class object. // Access is synchronized on the AlarmManager class object.
// private static WeakHashMap<OnAlarmListener, ListenerWrapper> sWrappers;
// 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;
/** /**
* package private on purpose * package private on purpose
@@ -637,16 +631,14 @@ public class AlarmManager {
if (listener != null) { if (listener != null) {
synchronized (AlarmManager.class) { synchronized (AlarmManager.class) {
if (sWrappers == null) { if (sWrappers == null) {
sWrappers = new WeakHashMap<OnAlarmListener, WeakReference<ListenerWrapper>>(); sWrappers = new WeakHashMap<OnAlarmListener, ListenerWrapper>();
} }
WeakReference<ListenerWrapper> wrapperRef = sWrappers.get(listener); recipientWrapper = sWrappers.get(listener);
// no existing wrapper *or* we've lost our weak ref to it => build a new one // no existing wrapper => build a new one
if (wrapperRef == null || if (recipientWrapper == null) {
(recipientWrapper = wrapperRef.get()) == null) {
recipientWrapper = new ListenerWrapper(listener); recipientWrapper = new ListenerWrapper(listener);
wrapperRef = new WeakReference<ListenerWrapper>(recipientWrapper); sWrappers.put(listener, recipientWrapper);
sWrappers.put(listener, wrapperRef);
} }
} }
@@ -906,11 +898,7 @@ public class AlarmManager {
ListenerWrapper wrapper = null; ListenerWrapper wrapper = null;
synchronized (AlarmManager.class) { synchronized (AlarmManager.class) {
if (sWrappers != null) { if (sWrappers != null) {
final WeakReference<ListenerWrapper> wrapperRef; wrapper = sWrappers.get(listener);
wrapperRef = sWrappers.get(listener);
if (wrapperRef != null) {
wrapper = wrapperRef.get();
}
} }
} }