diff options
author | Danny Baumann <dannybaumann@web.de> | 2013-04-30 13:06:04 +0200 |
---|---|---|
committer | Danny Baumann <dannybaumann@web.de> | 2013-04-30 13:08:34 +0200 |
commit | 9975780f073b29fbb85b0ee1cd700f1828f783c7 (patch) | |
tree | 6f35b734cc50ed9843b5fb4983d66b3746665e3d /packages/SystemUI/src/com/android/systemui/statusbar/policy/CircleBattery.java | |
parent | c926976008af16ab5e3a0bb532aeeb69565e3429 (diff) | |
download | frameworks_base-9975780f073b29fbb85b0ee1cd700f1828f783c7.zip frameworks_base-9975780f073b29fbb85b0ee1cd700f1828f783c7.tar.gz frameworks_base-9975780f073b29fbb85b0ee1cd700f1828f783c7.tar.bz2 |
Fix SystemUI memory leaks on theme changes.
ContentObserver and BroadcastReceiver instances were dangling after the
status bar was recreated.
Change-Id: I0ef7ef134029e5deec066d405545b8d9ec58d76b
Diffstat (limited to 'packages/SystemUI/src/com/android/systemui/statusbar/policy/CircleBattery.java')
-rw-r--r-- | packages/SystemUI/src/com/android/systemui/statusbar/policy/CircleBattery.java | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/CircleBattery.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/CircleBattery.java index 01178c0..9aeb200 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/CircleBattery.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/CircleBattery.java @@ -54,6 +54,7 @@ public class CircleBattery extends ImageView { private Handler mHandler; private Context mContext; private BatteryReceiver mBatteryReceiver = null; + private SettingsObserver mObserver; // state variables private boolean mAttached; // whether or not attached to a window @@ -100,6 +101,10 @@ public class CircleBattery extends ImageView { onChange(true); } + public void unobserve() { + mContext.getContentResolver().unregisterContentObserver(this); + } + @Override public void onChange(boolean selfChange) { int batteryStyle = (Settings.System.getInt(mContext.getContentResolver(), @@ -190,8 +195,7 @@ public class CircleBattery extends ImageView { mContext = context; mHandler = new Handler(); - SettingsObserver settingsObserver = new SettingsObserver(mHandler); - settingsObserver.observe(); + mObserver = new SettingsObserver(mHandler); mBatteryReceiver = new BatteryReceiver(mContext); // initialize and setup all paint variables @@ -260,6 +264,7 @@ public class CircleBattery extends ImageView { super.onAttachedToWindow(); if (!mAttached) { mAttached = true; + mObserver.observe(); mBatteryReceiver.updateRegistration(); mHandler.postDelayed(mInvalidate, 250); } @@ -270,6 +275,7 @@ public class CircleBattery extends ImageView { super.onDetachedFromWindow(); if (mAttached) { mAttached = false; + mObserver.unobserve(); mBatteryReceiver.updateRegistration(); mRectLeft = null; // makes sure, size based variables get // recalculated on next attach |