在正常情況下,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設定:
<LinearLayout android:layout_width="fill_parent" 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聲明
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission 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的第一個參數,可以有:
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
*PARTIAL_WAKE_LOCK參數和其他不同,如果選擇了這個參數,那即時使用者按了關機鍵,CPU仍保持運作;而其他參數在使用者按了關機鍵之後,CPU即停止運作,如果不按關機鍵,系統在過一段時間休眠後,CPU仍保持運作。
在程式退出時,必須釋放WakeLock:
private void releaseWakeLock() {
if (wakeLock != null && wakeLock.isHeld()) {
wakeLock.release();
wakeLock = null;
}
}
這兩個方法分别在OnCreate/OnDestroy或者OnResume/OnPause中調用。