在官方文件中有一篇「Keeping the Device Awake」的文章,以下是大致的內容
要保持設備"醒著",有分兩種狀況:
- 保持螢幕常亮(Keep the Screen On)
- 保持CPU運作(Keep the CPU On)
保持螢幕常亮(Keep the Screen On)
大部份的需求大概是這種,例如用於遊戲,或播放影片等,這種需求不需要加入額外的權限,實際做法有兩種:
- 如果是某個畫面固定要保持螢幕常亮,則直接在 layout xml 中加入 android:keepScreenOn="true" 屬性即可,例如
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:keepScreenOn="true"> ... </RelativeLayout>
- 如果需要動態開關,則程式語法如下:
//開的語法 getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); //關的語法 getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
保持CPU運作(Keep the CPU On)
使用時機:需要在背景完成一些事,此時 CPU 雖是 On,但 Screen 是 Off 的
原則:
- 保持 CPU On 的時間應該盡可能的短
- 應該用於背景服務,不要在 Activity 中使用 CPU On (Activity 應該要用 Screen On)
實際做法如下:
- 在 AndroidManifest.xml 加入
<uses-permission android:name="android.permission.WAKE_LOCK" />
- 程式語法:
//開的語法 PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE); WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakelockTag"); wakeLock.acquire(); //關的語法 wakelock.release();
但如果 App 有 broadcast receiver,則做法不同,這裡先不談,請參考原文說明
沒有留言:
張貼留言
廣告訊息會被我刪除