PowerManagerService第二讲之WakeLock

WakeLock是一种锁机制,只要有进程持有这个锁,CPU就一直在工作,系统就不会进入到休眠状态。

关于WakeLock的使用方法其实在PowerManager类中的注释已经给出了,来看描述:

    /**
     * This class gives you control of the power state of the device.
     *
     * <p>
     * <b>Device battery life will be significantly affected by the use of this API.</b>
     * Do not acquire {@link WakeLock}s unless you really need them, use the minimum levels
     * possible, and be sure to release them as soon as possible.
     * </p><p>
     * The primary API you'll use is {@link #newWakeLock(int, String) newWakeLock()}.
     * This will create a {@link PowerManager.WakeLock} object.  You can then use methods
     * on the wake lock object to control the power state of the device.
     * </p><p>
     * In practice it's quite simple:
     * {@samplecode
     * PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
     * PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");
     * wl.acquire();
     *   ..screen will stay on during this section..
     * wl.release();
     * }
     * </p><p>
     * The following wake lock levels are defined, with varying effects on system power.
     * <i>These levels are mutually exclusive - you may only specify one of them.</i>

即代码实现是:

     PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
     PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");
     wl.acquire();
     //screen will stay on during this section..
     wl.release();

我们来看newWakeLock方法:

    public WakeLock newWakeLock(int levelAndFlags, String tag) {
   
        validateWakeLockParameters(levelAndFlags, tag);
        // 创建一个WakeLock并返回
        return new WakeLock(levelAndFlags, tag, mContext.getOpPackageName());
    }

    /** @hide */
    public static void validateWakeLockParameters(int levelAndFlags, String tag) {
   
        switch (levelAndFlags & WAKE_LOCK_LEVEL_MASK) {
   
            case PARTIAL_WAKE_LOCK:
            case SCREEN_DIM_WAKE_LOCK:
            case SCREEN_BRIGHT_WAKE_LOCK:
            case FULL_WAKE_LOCK:
            case PROXIMITY_SCREEN_OFF_WAKE_LOCK:
            case DOZE_WAKE_LOCK:
            case DRAW_WAKE_LOCK:
                break;
            default:
                throw new IllegalArgumentException("Must specify a valid wake lock level."
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值