I was confused by the code of auto brightness control.
The following is the code in PowerManagerService.java,
2728 SensorEventListener mLightListener = new
SensorEventListener() {
2729 public void onSensorChanged(SensorEvent event) {
2730 synchronized (mLocks) {
2731 // ignore light sensor while screen is turning
off
2732 if (isScreenTurningOffLocked()) {
2733 return;
2734 }
2735
2736 int value = (int)event.values[0];
2737 long milliseconds =
SystemClock.elapsedRealtime();
2738 if (mDebugLightSensor) {
2739 Slog.d(TAG, "onSensorChanged: light value: "
+ value);
2740 }
2741 mHandler.removeCallbacks(mAutoBrightnessTask);
2742 if (mLightSensorValue != value) {
2743 if (mLightSensorValue == -1 ||
2744 milliseconds < mLastScreenOnTime +
mLightSensorWarmupTime) {
2745 // process the value immediately if
screen has just turned on
2746 lightSensorChangedLocked(value);
2747 } else {
2748 // delay processing to debounce the
sensor
2749 mLightSensorPendingValue = value;
2750 mHandler.postDelayed(mAutoBrightnessTask,
LIGHT_SENSOR_DELAY);
2751 }
2752 } else {
2753 mLightSensorPendingValue = -1;
2754 }
2755 }
2756 }
2757
2758 public void onAccuracyChanged(Sensor sensor, int
accuracy) {
2759 // ignore
2760 }
2761 };
(2741) will remove the unfinished task (previous event),
then in this event(2750), it will call postDelayed() to launch a new
task (but it will be delayed accroding to LIGHT_SENSOR_DELAY)
my question is, event listener uses "NORMAL DELAY(200ms)", but
postDelayed uses LIGHT_SENSOR_DELAY(2000ms)
the task will not be executed forever (always be canceled by next
event)
Am I misunderstanding something?
--
unsubscribe: [email protected]
website: http://groups.google.com/group/android-porting