Android的待机状态管理由PowerManagerService.java管理

主要的状态更新方法在下面贴出代码, 注释写的很清楚, 第一次看系统源码感觉还比较爽

主要是更新唤醒, 屏幕休眠以及其他的一些状态, 然后系统根据更新的状态进行一些操作, 比如系统睡眠, 进入屏保, 或者电源模式变更等等.


 /**     * Updates the global power state based on dirty bits recorded in mDirty.     *     * This is the main function that performs power state transitions.     * We centralize them here so that we can recompute the power state completely     * each time something important changes, and ensure that we do it the same     * way each time.  The point is to gather all of the transition logic here.     */    private void updatePowerStateLocked() {        if (!mSystemReady || mDirty == 0) {            return;        }        if (!Thread.holdsLock(mLock)) {            Slog.wtf(TAG, "Power manager lock was not held when calling updatePowerStateLocked");        }        // Phase 0: Basic state updates.        updateIsPoweredLocked(mDirty);        updateStayOnLocked(mDirty);        // Phase 1: Update wakefulness.        // Loop because the wake lock and user activity computations are influenced        // by changes in wakefulness.        final long now = SystemClock.uptimeMillis();        int dirtyPhase2 = 0;        for (;;) {            int dirtyPhase1 = mDirty;            dirtyPhase2 |= dirtyPhase1;            mDirty = 0;            updateWakeLockSummaryLocked(dirtyPhase1);            updateUserActivitySummaryLocked(now, dirtyPhase1);            if (!updateWakefulnessLocked(dirtyPhase1)) {                break;            }        }        // Phase 2: Update dreams and display power state.        updateDreamLocked(dirtyPhase2);        updateDisplayPowerStateLocked(dirtyPhase2);        // Phase 3: Send notifications, if needed.        if (mDisplayReady) {            sendPendingNotificationsLocked();        }        // Phase 4: Update suspend blocker.        // Because we might release the last suspend blocker here, we need to make sure        // we finished everything else first!        updateSuspendBlockerLocked();    }

调用updatePowerStateLocked()方法的地方有:


可以发现, 基本都是接受到一些系统广播之后进行调用(以handle开头的方法), 以及系统设置后调用(set开头的方法), 来更新电源状态, 还有一些接口回调, 主要是给用户的一些操作


先是public的回调方法, 回调方法把任务传递到内部的private方法(Internal结尾), 还有接收的native方法(Native结尾), 最后都是通过Locked结尾的方法调用updatePowerStateLocked()更新状态.


更多相关文章

  1. Android之Intent显示和隐式调用
  2. android自动加载模块.ko文件的小方法
  3. android 两指缩放图片 event.getActionMasked() 方法的使用
  4. Android的图形API调用(一)
  5. Android中view绘制常用知识
  6. Android(安卓)Provider用法
  7. 在Android应用中定制菜单
  8. Android(安卓)Camera 通过V4L2与kernel driver的完整交互过程
  9. Android蓝牙栈bluez使用方法

随机推荐

  1. Android图形显示系统——概述
  2. android 触摸(Touch)事件、点击(Click)事
  3. Android之ListView详解
  4. Android的多语言实现
  5. 【Android车载系统 News | Tech 2】News
  6. 个人开发者如何通过Android应用赚外快[推
  7. 关于使用Android(安卓)NDK编译ffmpeg
  8. android 调用系统文件管理器
  9. Unity在Android和iOS中如何调用Native AP
  10. 冰淇淋三明治喂平板电脑也很好吃吗?(影片)