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;
}
}
}