1. 程式人生 > >Android如何保持程式一直執行 (讓螢幕常亮且停在當前程式介面)

Android如何保持程式一直執行 (讓螢幕常亮且停在當前程式介面)

在正常情況下,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中呼叫。