Android7.0 Doze模式分析(二)wakelock

前面我们介绍Doze模式的时候介绍过WakeLock白名单,WakeLock进入Doze接口等。这篇博客我们详细分析下,WakeLock在Doze模式下如何生效。

 

设置白名单

在DeviceIdleController中我们调用PowerManagerService的如下接口,来设置WakeLock的白名单。注意这里设置的appid就是uid。

        @Override
        public void setDeviceIdleWhitelist(int[] appids) {
            setDeviceIdleWhitelistInternal(appids);
        }

setDeviceIdleWhitelistInternal接口,就是把白名单放到mDeviceIdleWhitelist中。如果当前在Doze模式下,调用updateWakeLockDisabledStatesLocked函数

 

    void setDeviceIdleWhitelistInternal(int[] appids) {
        synchronized (mLock) {
            mDeviceIdleWhitelist = appids;
            if (mDeviceIdleMode) {//Doze模式下
                updateWakeLockDisabledStatesLocked();
            }
        }
    }

updateWakeLockDisabledStatesLocked函数就是遍历所有的WakeLock,然后又持cpu锁的(这才是阻止设备睡眠的根本),调用setWakeLockDisabledStateLocked函数,这个函数就是是否要把这个WakeLock

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值