android 休眠锁

来源:互联网 发布:淘宝无线端运营 编辑:程序博客网 时间:2024/06/05 15:33
//申请休眠锁
PowerManager.WakeLock wl;
private void acquireWakeLock()
{
    PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE);
    wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK,"My Tag");
    wl.acquire();
}


// 释放休眠锁
private void releaseWakeLock() {
if (wl != null) {
wl.release();
}

}


Android中设置禁止休眠有两种方式: 

1. 在View中设置FLAG_KEEP_SCREEN_ON。 

实现上可以在代码中设置,也可以在XML文件中设置。 

代码如下所示: 

  1. getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
复制代码



或者配置文件对该View设置: 

  1. <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" 
  2. android:keepScreenOn="true" 
  3. android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android">
复制代码



这样可以保持当前View所在的Activity一直在活动状态运行,而且屏幕是高亮的。非常耗电!! 

2.通过PowerManager来精细控制。 

首先在Manifest.xml文件里面用user-permission声明 

  1. <uses-permission android:name="android.permission.WAKE_LOCK"/> 
  2. <uses-permission android:name="android.permission.DEVICE_POWER" />
复制代码



之后通过PowerManager服务来获取电量控制锁: 

  1. private void acquireWakeLock() {       
  2.   if (wakeLock == null) {         
  3.    PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);     
  4.    wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, this.getClass().getCanonicalName()); 
  5.    wakeLock.acquire();     
  6.    }   
  7.   }
复制代码



关键代码在newWakeLock的第一个参数,可以有: 



  1. Flag Value CPU Screen Keyboard 
  2. PARTIAL_WAKE_LOCK On* Off Off 
  3. SCREEN_DIM_WAKE_LOCK On Dim Off 
  4. SCREEN_BRIGHT_WAKE_LOCK On Bright Off 
  5. FULL_WAKE_LOCK On Bright Bright 
复制代码




*PARTIAL_WAKE_LOCK参数和其他不同,如果选择了这个参数,那即时用户按了关机键,CPU仍保持运行;而其他参数在用户按了关机键之后,CPU即停止运行,如果不按关机键,系统在过一段时间休眠后,CPU仍保持运行。 

在程序退出时,必须释放WakeLock: 

  1. private void releaseWakeLock() {     
  2.   if (wakeLock != null && wakeLock.isHeld()) {      
  3.    wakeLock.release();      
  4.    wakeLock = null;   
  5.    } 
  6. }
复制代码



这两个方法分别在OnCreate/OnDestroy或者OnResume/OnPause中调用。

0 0
原创粉丝点击