Android如何保持程式一直執行 (讓螢幕常亮且停在當前程式介面)
阿新 • • 發佈:2019-01-26
在正常情況下,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中呼叫。