From ea86d71308fad8e05398f653034e1714b2b98e28 Mon Sep 17 00:00:00 2001 From: yangyankai1 Date: Mon, 12 Oct 2020 15:13:24 +0800 Subject: [PATCH] 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 Change-Id: I346696c69623829d4dda372edaf35b6e3f147780 --- core/java/com/android/internal/BrightnessSynchronizer.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/java/com/android/internal/BrightnessSynchronizer.java b/core/java/com/android/internal/BrightnessSynchronizer.java index 42724bede4813..8ff3c497662c6 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(); } }