【Android 電量優化】電量優化 ( 喚醒鎖定 | 使用 WeakLock 保持服務喚醒 | 屏幕喚醒 )

      網友投稿 1125 2025-04-01

      文章目錄


      一、使用 WeakLock 保持 CPU 喚醒 ( 費電操作 )

      1、保持 CPU 喚醒

      2、使用 WeakLock 保持 CPU 喚醒流程

      3、使用 WeakLock 保持 CPU 喚醒代碼示例

      二、屏幕喚醒

      三、源碼及資源下載

      參考 Google 官方文檔 :

      優化電池續航時間

      管理設備喚醒狀態

      使設備保持喚醒狀態

      設置重復鬧鈴時間

      一、使用 WeakLock 保持 CPU 喚醒 ( 費電操作 )

      1、保持 CPU 喚醒

      1 . Android 設備休眠次序 :

      Android 設備長時間不使用時 ,

      ① 屏幕先變暗 ,

      ② 然后屏幕關閉 ,

      ③ 最后關閉 CPU ;

      2 . CPU 喚醒狀態 :

      如果 CPU 被關閉了 , 那么 Service 服務 , 肯定無法運行了 ,

      這里需要讓 CPU 保持喚醒狀態 ;

      3 . Service 服務后臺運行 : 后臺 Service 服務運行時 , 需要 CPU 喚醒 , 維持后臺服務運行 ;

      2、使用 WeakLock 保持 CPU 喚醒流程

      使用 WeakLock 保持 CPU 喚醒流程 :

      ① 獲取 Powermanager 服務 :

      跨進程獲取 Powermanager 服務 ;

      PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);

      1

      ② 判斷是否支持 CPU 喚醒 :

      調用 PowerManager 對象的 isWakeLockLevelSupported 方法

      , 獲取該設備是否支持 CPU 喚醒操作 ;

      powerManager.isWakeLockLevelSupported(PowerManager.PARTIAL_WAKE_LOCK)

      1

      ③ 創建 PowerManager.WakeLock :

      調用 PowerManager 對象 的 newWakeLock 方法

      , 創建喚醒鎖 ;

      mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "WAKE_LOCK");

      1

      ④ 開啟喚醒 CPU 操作 :

      調用 PowerManager.WakeLock 對象的 acquire 開始喚醒 CPU 操作 ;

      mWakeLock.acquire();

      1

      ⑤ 結束喚醒 CPU 操作 :

      不需要 CPU 喚醒時 , 及時釋放喚醒鎖 ;

      mWakeLock.release();

      1

      3、使用 WeakLock 保持 CPU 喚醒代碼示例

      1 . 在 AndroidManifest.xml 中設置權限 : 刪除了大部分配置 , 只保留必要配置 ;

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      2 . 服務 Service 保持 CPU 喚醒代碼示例 :

      package kim.hsl.bp; import android.annotation.SuppressLint; import android.app.Service; import android.Content.Intent; import android.os.Build; import android.os.IBinder; import android.os.PowerManager; import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; public class WeakLockService extends Service { public static final String TAG = "WeakLockService"; /** * 喚醒鎖定 服務 */ private PowerManager.WakeLock mWakeLock; @Nullable @Override public IBinder onBind(Intent intent) { return null; } @SuppressLint("InvalidWakeLockTag") @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) @Override public void onCreate() { super.onCreate(); // 跨進程獲取 PowerManager 服務 PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE); // 判斷是否支持 CPU 喚醒 boolean isWakeLockLevelSupported = powerManager. isWakeLockLevelSupported(PowerManager.PARTIAL_WAKE_LOCK); // 支持 CPU 喚醒 , 才保持喚醒 if(isWakeLockLevelSupported){ // 創建只喚醒 CPU 的喚醒鎖 mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "WAKE_LOCK"); // 開始喚醒 CPU mWakeLock.acquire(); } } @Override public void onDestroy() { super.onDestroy(); // 釋放 CPU 喚醒鎖 if(mWakeLock != null){ mWakeLock.release(); } } }

      1

      2

      3

      4

      5

      6

      【Android 電量優化】電量優化 ( 喚醒鎖定 | 使用 WeakLock 保持服務喚醒 | 屏幕喚醒 )

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

      31

      32

      33

      34

      35

      36

      37

      38

      39

      40

      41

      42

      43

      44

      45

      46

      47

      48

      49

      50

      51

      52

      53

      54

      55

      56

      57

      58

      59

      60

      二、屏幕喚醒

      屏幕喚醒操作 :

      ① 代碼中設置 :

      Activity 中為 Window 添加

      WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON

      標識 ;

      package kim.hsl.bp; import android.os.Bundle; import android.view.WindowManager; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { public static final String TAG = "MainActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      ② 配置文件設置 : 在布局的根標簽中設置

      android:keepScreenOn=“true”

      屬性 ;

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      上述配置不需要特殊權限 , 不需要維護資源的申請釋放 ;

      三、源碼及資源下載

      源碼及資源- :

      ① GitHub 工程地址 : Battery_Performance

      ② 使用 WeakLock 保持 CPU 喚醒 Service 代碼地址 : WeakLockService.java

      ③ AndroidManifest.xml 配置文件地址 : AndroidManifest.xml

      ④ 屏幕喚醒 MainActivity.java 地址 : MainActivity.java

      ⑤ 屏幕喚醒布局文件 activity_main.xml 地址 : activity_main.xml

      Android

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:請問背景音樂如何只播放一次 而不是循環播放(背景音樂連續播放)
      下一篇:WPS文字技巧—利用自定義編號批量填充表格(wps文字表格自動填充序號)
      相關文章
      亚洲女人影院想要爱| 亚洲欧洲精品视频在线观看| 狠狠色伊人亚洲综合网站色| 亚洲美女视频一区| 亚洲国产a∨无码中文777| 亚洲中文字幕不卡无码| 久久精品国产亚洲Aⅴ蜜臀色欲| 亚洲国产精品专区在线观看| 狠狠入ady亚洲精品| 大桥未久亚洲无av码在线| 国产精品无码亚洲一区二区三区| 亚洲精品GV天堂无码男同| 亚洲成a人无码亚洲成av无码| 亚洲色大成网站www永久男同| 97se亚洲国产综合自在线| 亚洲情A成黄在线观看动漫软件 | 亚洲视频一区在线播放| 青青草原精品国产亚洲av| 亚洲永久中文字幕在线| 亚洲AV综合色区无码二区爱AV| ass亚洲**毛茸茸pics| 亚洲日本乱码卡2卡3卡新区| 亚洲欧美日韩一区二区三区在线| 亚洲国产精品无码久久九九大片 | 亚洲最大中文字幕无码网站| 亚洲色偷偷偷综合网| 亚洲AV成人无码久久WWW| 国产精品亚洲综合一区在线观看| 亚洲成av人片天堂网老年人 | 91亚洲国产成人久久精品| wwwxxx亚洲| 亚洲国产成人AV在线播放| 国产精品亚洲综合网站| 久久久亚洲精品蜜桃臀| 亚洲爆乳精品无码一区二区三区| 亚洲一区影音先锋色资源| 亚洲欧洲国产综合| 中文字幕亚洲综合久久| 亚洲天天在线日亚洲洲精| 亚洲日本香蕉视频观看视频| 中文字幕亚洲综合久久综合|