Android 休眠和唤醒(不会深度休眠状态)

来源:互联网 发布:淘宝联盟如何做推广 编辑:程序博客网 时间:2024/05/22 01:40

1.首先在android开发环境下来编译的。(这可能你的开发源码环境的接口不能使用,例如goToSleep(),之前试过这个方法在eclipse编译试了好几次都执行不了,也不报错,晕了好久,后面看源码,开发源码和google接口有所不一样,吸取教训)

2.这里控制是不让系统深度休眠,CPU继续运作:屏幕、键盘灯有不同影响。

  获取WakeLock实例后通过acquire()获取相应的锁,然后进行其他业务逻辑的操作,最后使用release()释放(释放是必须的)。

关于int flags

PARTIAL_WAKE_LOCK:保持CPU 运转,屏幕和键盘灯有可能是关闭的。

SCREEN_DIM_WAKE_LOCK:保持CPU 运转,允许保持屏幕显示但有可能是灰的,允许关闭键盘灯

SCREEN_BRIGHT_WAKE_LOCK:保持CPU 运转,允许保持屏幕高亮显示,允许关闭键盘灯

FULL_WAKE_LOCK:保持CPU 运转,保持屏幕高亮显示,键盘灯也保持亮度

ACQUIRE_CAUSES_WAKEUP:正常唤醒锁实际上并不打开照明。

例如:

relaseWakeLock = this.localPowerManager.newWakeLock(
PowerManager.PARTIAL_WAKE_LOCK, getClass() 
                    .getCanonicalName());// 第一个参数为电源锁级别,第二个是日志tag
relaseWakeLock.acquire();

这里relaseWakeLock.acquire()如果不释放的话,CPU都是一直运转的,即使没插入USB的话,CPU还是继续运转。如果释放了,在下面调用唤醒和休眠时候,会深度休眠状态。

3.

public void onSensorChanged(SensorEvent event) {
float[] its = event.values;
Log.i(TAG, "onSensorChanged currentdata = " + its[0]);
if (its != null && event.sensor.getType() == Sensor.TYPE_PROXIMITY) {
if (its[0] == 0) {// 靠近 亮
Log.i(TAG, "onSensorChanged show = "+localPowerManager.isScreenOn());
if(!localPowerManager.isScreenOn()){
power.wakeUp(SystemClock.uptimeMillis());
}
} else {// 远离 灭
Log.i("MainActivity", "goTosleep");
if(localPowerManager.isScreenOn()){


Log.i("MainActivity", "goTosleep");
           if(null != power){
               power.goToSleep(SystemClock.uptimeMillis());
               Log.i("MainActivity", "goTosleep");
           }
}

}
}
}

这里使用wakeUp()唤醒和goToSleep()进行休眠状态。

1 0