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

一、使用 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
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小時內刪除侵權內容。