diff options
| -rw-r--r-- | core/java/com/android/internal/os/BatteryStatsImpl.java | 37 |
1 files changed, 12 insertions, 25 deletions
diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java index 6c8be147528e..af50420208b3 100644 --- a/core/java/com/android/internal/os/BatteryStatsImpl.java +++ b/core/java/com/android/internal/os/BatteryStatsImpl.java @@ -106,7 +106,6 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintWriter; import java.nio.charset.StandardCharsets; -import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; @@ -1062,7 +1061,7 @@ public class BatteryStatsImpl extends BatteryStats { // methods are protected not private to be VisibleForTesting public static class TimeBase { - protected final ArrayList<WeakReference<TimeBaseObs>> mObservers = new ArrayList<>(); + protected final ArrayList<TimeBaseObs> mObservers = new ArrayList<>(); protected long mUptime; protected long mRealtime; @@ -1106,24 +1105,17 @@ public class BatteryStatsImpl extends BatteryStats { } public void add(TimeBaseObs observer) { - mObservers.add(new WeakReference<TimeBaseObs>(observer)); + mObservers.add(observer); } public void remove(TimeBaseObs observer) { - if (!mObservers.removeIf(ref -> ref.get() == observer)) { - Slog.wtf(TAG, "Removed unknown observer: " + observer); - } + if (!mObservers.remove(observer)) { + Slog.wtf(TAG, "Removed unknown observer: " + observer); + } } public boolean hasObserver(TimeBaseObs observer) { - Iterator<WeakReference<TimeBaseObs>> i = mObservers.iterator(); - while (i.hasNext()) { - TimeBaseObs obs = i.next().get(); - if (obs == observer) { - return true; - } - } - return false; + return mObservers.contains(observer); } public void init(long uptime, long realtime) { @@ -1212,11 +1204,9 @@ public class BatteryStatsImpl extends BatteryStats { mRealtimeStart = realtime; long batteryUptime = mUnpluggedUptime = getUptime(uptime); long batteryRealtime = mUnpluggedRealtime = getRealtime(realtime); - for (WeakReference<TimeBaseObs> ref : mObservers) { - TimeBaseObs obs = ref.get(); - if (obs != null) { - obs.onTimeStarted(realtime, batteryUptime, batteryRealtime); - } + + for (int i = mObservers.size() - 1; i >= 0; i--) { + mObservers.get(i).onTimeStarted(realtime, batteryUptime, batteryRealtime); } } else { mPastUptime += uptime - mUptimeStart; @@ -1224,14 +1214,11 @@ public class BatteryStatsImpl extends BatteryStats { long batteryUptime = getUptime(uptime); long batteryRealtime = getRealtime(realtime); - for (WeakReference<TimeBaseObs> ref : mObservers) { - TimeBaseObs obs = ref.get(); - if (obs != null) { - obs.onTimeStopped(realtime, batteryUptime, batteryRealtime); - } + + for (int i = mObservers.size() - 1; i >= 0; i--) { + mObservers.get(i).onTimeStopped(realtime, batteryUptime, batteryRealtime); } } - mObservers.removeIf(ref -> ref.get() == null); return true; } return false; |