应用唤醒锁工具类AlertWakeLock

1.应用唤醒锁工具类AlertWakeLock

手机休眠后,应用的计算、计时、下载可能因CPU休眠,导致应用本身没法消息、数据、广播没有及时收到。针对CPU休眠引起的问题,可以使用持锁让CPU不休眠下去。
例如全天候要采集手机的温度等需求就可以使用该工具类。

CPU锁不释放会导致待机功耗大

2. 运用

2.0 需要配置权限
    <uses-permission android:name="android.permission.WAKE_LOCK" />
2.1 持锁
    public static void acquireCpuWakeLock(Context context) {
        if (sCpuWakeLock != null) {
            return;
        }

        sCpuWakeLock = createPartialWakeLock(context);
        // 第三步:acquire()获取相应的锁
        sCpuWakeLock.acquire();
    }
2.2 释放锁
    public static void releaseCpuLock() {
        if (sCpuWakeLock != null) {
            // 最后:release释放
            sCpuWakeLock.release();
            sCpuWakeLock = null;
        }
    }
2.3 完整源码
package com.li.temperature.chart.util;

import android.content.Context;
import android.os.PowerManager;

/*
 Flag Value                 CPU        Screen      Keyboard
 PARTIAL_WAKE_LOCK            On           Off         Off
 SCREEN_DIM_WAKE_LOCK         On           Dim         Off
 SCREEN_BRIGHT_WAKE_LOCK      On           Bright      Off
 FULL_WAKE_LOCK               On           Bright      Bright
 */
public class AlertWakeLock {
    private static final String TAG = "AlertWakeLock";
    private static PowerManager.WakeLock sCpuWakeLock;

    static PowerManager.WakeLock createPartialWakeLock(Context context) {
        // 第一步:获取PowerManager的实例
        PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
        if (null == pm) {
            return null;
        }
        // 第二步:调用PowerManager中的newWakeLock方法创建一个WakeLock对象
        return pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
        // return pm.newWakeLock(PowerManager.FULL_WAKE_LOCK |
        // PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.ON_AFTER_RELEASE,
        // TAG);
    }

    public static void acquireCpuWakeLock(Context context) {
        if (sCpuWakeLock != null) {
            return;
        }

        sCpuWakeLock = createPartialWakeLock(context);
        // 第三步:acquire()获取相应的锁
        sCpuWakeLock.acquire();
    }

    public static void releaseCpuLock() {
        if (sCpuWakeLock != null) {
            // 最后:release释放
            sCpuWakeLock.release();
            sCpuWakeLock = null;
        }
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

法迪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值