在正常情况下,Android系统会让程序和服务进入休眠状态以节约电量使用。然而在开发Android程序时,有时候在程序运行的时候,不能让系统休眠,否则有一些运行会停止,因此我们需要设置禁止休眠。
Android中设置禁止休眠有两种方式:
1.
在View中设置FLAG_KEEP_SCREEN_ON。
实现上可以在代码中设置,也可以在XML文件中设置。
代码如下所示:
getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
或者配置文件对该View设置:
android:layout_height="fill_parent"
android:keepScreenOn="true" android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android">
这样可以保持当前View所在的Activity一直在活动状态运行,而且屏幕是高亮的。非常耗电!!
2.通过PowerManager来精细控制。
首先在Manifest.xml文件里面用user-permission声明
android:name="android.permission.WAKE_LOCK"/>
android:name="android.permission.DEVICE_POWER"
/>
之后通过PowerManager服务来获取电量控制锁:
private void
acquireWakeLock()
{ if (wakeLock == null)
{ PowerManager
pm = (PowerManager)
getSystemService(Context.POWER_SERVICE); wakeLock =
pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
this.getClass().getCanonicalName()); wakeLock.acquire(); } }
关键代码在newWakeLock的第一个参数,可以有:
*PARTIAL_WAKE_LOCK参数和其他不同,如果选择了这个参数,那即时用户按了关机键,CPU仍保持运行;而其他参数在用户按了关机键之后,CPU即停止运行,如果不按关机键,系统在过一段时间休眠后,CPU仍保持运行。
在程序退出时,必须释放WakeLock:
private void releaseWakeLock()
{ if (wakeLock != null
&& wakeLock.isHeld())
{ wakeLock.release(); wakeLock =
null; }
}
这两个方法分别在OnCreate/OnDestroy或者OnResume/OnPause中调用。