diff options
| author | 2020-10-12 15:13:24 +0800 | |
|---|---|---|
| committer | 2020-10-12 15:13:24 +0800 | |
| commit | ea86d71308fad8e05398f653034e1714b2b98e28 (patch) | |
| tree | bae24d5d8ffe31302bc044c602f85534058cc91f | |
| parent | 19189d886b32928e9da0c96108310a42c0db2c1f (diff) | |
AutoBrightness: Remove handler's messages before send.
The contentprovider's callback 'onChange(...)' is asynchronous.
If one app set the 'screen_brightness' provider frequently over a period of time,
the contentprovider's 'onChange(...)' can't stop, just like 'Self-exciting oscillation'.
So, We need remove handler's messages before send.
Test: build pass, feature pass.
TestCase: set the 'screen_brightness' provider frequently, can use a
loop: for(i=0;i<1000;i++){put(...)}.
Signed-off-by: yangyankai1 <yangyankai1@xiaomi.com>
Change-Id: I346696c69623829d4dda372edaf35b6e3f147780
| -rw-r--r-- | core/java/com/android/internal/BrightnessSynchronizer.java | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/core/java/com/android/internal/BrightnessSynchronizer.java b/core/java/com/android/internal/BrightnessSynchronizer.java index 42724bede481..8ff3c497662c 100644 --- a/core/java/com/android/internal/BrightnessSynchronizer.java +++ b/core/java/com/android/internal/BrightnessSynchronizer.java @@ -259,10 +259,12 @@ public class BrightnessSynchronizer{ } if (BRIGHTNESS_URI.equals(uri)) { int currentBrightness = getScreenBrightnessInt(mContext); + mHandler.removeMessages(MSG_UPDATE_FLOAT); mHandler.obtainMessage(MSG_UPDATE_FLOAT, currentBrightness, 0).sendToTarget(); } else if (BRIGHTNESS_FLOAT_URI.equals(uri)) { float currentFloat = getScreenBrightnessFloat(mContext); int toSend = Float.floatToIntBits(currentFloat); + mHandler.removeMessages(MSG_UPDATE_INT); mHandler.obtainMessage(MSG_UPDATE_INT, toSend, 0).sendToTarget(); } } |