Android4.4电源管理——屏幕亮度设置

本文详细阐述了屏幕状态切换及亮度调整的核心机制,包括显示功率状态管理、屏幕开闭控制、背光亮度设置等关键步骤,以及同步更新流程与状态通知机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    private void initialize() {
    mPowerState = new DisplayPowerState(
                new ElectronBeam(mDisplayManager), mDisplayBlanker,
                mLights.getLight(LightsService.LIGHT_ID_BACKLIGHT));

    }

    private void setScreenOn(boolean on) {

        if (!mPowerState.isScreenOn() == on) {
            mPowerState.setScreenOn(on);
            if (on) {
                mNotifier.onScreenOn();
            } else {

                mNotifier.onScreenOff();

            }

     }


    /**
     * Sets whether the screen is on or off.
     */
    public void setScreenOn(boolean on) {
        if (mScreenOn != on) {
            if (DEBUG) {
                Slog.d(TAG, "setScreenOn: on=" + on);
            }

            mScreenOn = on;
            mScreenReady = false;
            scheduleScreenUpdate();
        }
    }


    private void scheduleScreenUpdate() {
        if (!mScreenUpdatePending) {
            mScreenUpdatePending = true;
            postScreenUpdateThreadSafe();
        }
    }


    private void postScreenUpdateThreadSafe() {
        mHandler.removeCallbacks(mScreenUpdateRunnable);
        mHandler.post(mScreenUpdateRunnable);
    }


    private final Runnable mScreenUpdateRunnable = new Runnable() {
        @Override
        public void run() {
            mScreenUpdatePending = false;

            int brightness = mScreenOn && mElectronBeamLevel > 0f ? mScreenBrightness : 0;
            if (mPhotonicModulator.setState(mScreenOn, brightness)) {
                mScreenReady = true;
                invokeCleanListenerIfNeeded();
            }
        }
    };


        public boolean setState(boolean on, int backlight) {
            synchronized (mLock) {
                if (on != mPendingOn || backlight != mPendingBacklight) {
                    if (DEBUG) {
                        Slog.d(TAG, "Requesting new screen state: on=" + on
                                + ", backlight=" + backlight);
                    }
                    
                    if (YulongFeature.FEATURE_YULONG) {
                        Slog.d(TAG, "Requesting new screen state: on=" + on
                                + ", backlight=" + backlight + ", mChangeInProgress=" + mChangeInProgress);
                    }
                    
                    mPendingOn = on;
                    mPendingBacklight = backlight;

                    if (!mChangeInProgress) {
                        mChangeInProgress = true;
                        Slog.i(TAG, "setState : AsyncTask.THREAD_POOL_EXECUTOR.execute(mTask)");
                        AsyncTask.THREAD_POOL_EXECUTOR.execute(mTask);
                    }
                }
                return mChangeInProgress;
            }
        }


       private final Runnable mTask = new Runnable() {

           @Override

           public void run() {

                // Apply pending changes untildone.

                for (;;) {

                    final boolean on;

                    final boolean onChanged;

                    final int backlight;

                    final booleanbacklightChanged;

                    synchronized (mLock) {

                        on = mPendingOn;

                        onChanged = (on !=mActualOn);

                        backlight = mPendingBacklight;

                        backlightChanged =(backlight != mActualBacklight);

                        if (!onChanged&& !backlightChanged) {

                            mChangeInProgress =false;

                            break;

                        }

                        mActualOn = on;

                        mActualBacklight =backlight;

                    }

                    if (onChanged &&on) {

                       mDisplayBlanker.unblankAllDisplays();

                    }

                    if (backlightChanged) {

                        mBacklight.setBrightness(backlight);                   

                    }

                    if (onChanged &&!on) {

                       mDisplayBlanker.blankAllDisplays();

                    }

                }

 

               // Let the outer class knowthat all changes have been applied.

                postScreenUpdateThreadSafe();

           }

       };


        public void setBrightness(int brightness) {
            setBrightness(brightness, BRIGHTNESS_MODE_USER);
        }

        public void setBrightness(int brightness, int brightnessMode) {
            synchronized (this) {
                int color = brightness & 0x000000ff;
                color = 0xff000000 | (color << 16) | (color << 8) | color;
                setLightLocked(color, LIGHT_FLASH_NONE, 0, 0, brightnessMode);
            }
        }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值