【Android 电量优化】电量优化 ( 使用 AlarmManager 保持 CPU 唤醒 )
文章目錄
- 一、AlarmManager 簡介
- 二、使用 AlarmManager 保持 CPU 喚醒流程 ( 省電操作 )
- 三、使用 WeakLock 保持 CPU 喚醒 代碼示例
- 1、Service 代碼示例
- 2、AndroidManifest.xml 服務配置
- 四、源碼及資源下載
參考 Google 官方文檔 :
- 優化電池續航時間
- 管理設備喚醒狀態
- 使設備保持喚醒狀態
- 設置重復鬧鈴時間
上一篇博客 【Android 電量優化】電量優化 ( 喚醒鎖定 | 使用 WeakLock 保持服務喚醒 | 屏幕喚醒 ) 中 , 使用 WeakLock 保持 CPU 喚醒 , 全程 CPU 都處于工作狀態 , 該操作耗電量非常大 ;
AlarmManager 可以一定程度上替代上述 WeakLock , 并且可以穩定每隔一段時間喚醒 CPU , 避免了 CPU 全程喚醒的情況 , 同時也降低了耗電量 ;
一、AlarmManager 簡介
AlarmManager 簡介 :
① 激活時間 : AlarmManager 可以脫離于應用生命周期限制 , 每隔一段時間 , 定期執行任務 ; 即使應用沒有執行 , 或者手機處于休眠狀態 , 也可以觸發執行操作 ;
② 間隔設定 : 開發者可以設定觸發任務執行的周期 , 該任務一般是通過發送延遲意圖 PendingIntent 實現 ;
③ 廣播接收者 : 一般使用 AlarmManager 定時發送 延遲意圖 PendingIntent 給廣播接收者 , 在廣播接收者中啟動服務 , 或者執行其它任務 ;
④ 降低資源消耗 : 如上述保持 CPU 喚醒 , 全程耗電 , 使用 AlarmManager 每隔一段時間 , 喚醒一次 , 執行任務 , 然后繼續休眠 , 可以極大降低資源消耗 ;
二、使用 AlarmManager 保持 CPU 喚醒流程 ( 省電操作 )
使用 AlarmManager 保持 CPU 處于喚醒狀態 , 比使用 WeakLock 更省電 ;
使用 AlarmManager 保持 CPU 喚醒流程 :
① 創建自定義廣播接收者 : 這里為了簡單 , 在 Service 中簡單創建一個廣播接收者 , 處理 ACTION 事件 ;
private BroadcastReceiver receiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {// 獲取廣播事件String action = intent.getAction();if(TextUtils.equals("ACTION", action)){Log.i(TAG, "receiver ACTION");}}};② 注冊廣播接收者 : 注冊上述創建的廣播接收者 , 注冊接收 ACTION 廣播 ;
IntentFilter intentFilter = new IntentFilter("ACTION"); registerReceiver( receiver, intentFilter);③ 創建延遲意圖 : 首先創建普通的 Intent 意圖 , 然后設置 ACTION 事件 , 根據該 Intent 創建延遲意圖 PendingIntent ;
mAlarmIntent = new Intent(); mAlarmIntent.setAction("ACTION"); PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, mAlarmIntent, 0);④ 鬧鐘管理器設置 : 獲取鬧鐘管理器 AlarmManager , 并設置每隔 50 秒發送一次廣播 , 廣播接收者接收到該意圖 , 就會處理對應事件 ;
// 獲取鬧鐘管理器 mAlarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); // 設置鬧鐘管理器每隔 50 秒發送一次延遲意圖 mAlarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(), 50000, pendingIntent);三、使用 WeakLock 保持 CPU 喚醒 代碼示例
1、Service 代碼示例
package kim.hsl.bp;import android.app.AlarmManager; import android.app.PendingIntent; import android.app.Service; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.IBinder; import android.os.SystemClock; import android.text.TextUtils; import android.util.Log;import androidx.annotation.Nullable;public class AlarmManagerService extends Service {public static final String TAG = "AlarmManagerService";/*** 鬧鐘意圖*/private Intent mAlarmIntent;/*** 鬧鐘管理器*/private AlarmManager mAlarmManager;@Nullable@Overridepublic IBinder onBind(Intent intent) {return null;}@Overridepublic void onCreate() {super.onCreate();// 使用鬧鐘管理器保持 CPU 喚醒alarmKeep();}@Overridepublic void onDestroy() {super.onDestroy();}private void alarmKeep(){// 注冊廣播接受者IntentFilter intentFilter = new IntentFilter("ACTION");registerReceiver( receiver, intentFilter);// 創建延遲意圖mAlarmIntent = new Intent();mAlarmIntent.setAction("ACTION");PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, mAlarmIntent, 0);// 獲取鬧鐘管理器, 并設置每隔 50 秒發送一次廣播mAlarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);mAlarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(), 50000, pendingIntent);}/*** 接收上面每隔 5 秒發送的廣播*/private BroadcastReceiver receiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {// 獲取廣播事件String action = intent.getAction();if(TextUtils.equals("ACTION", action)){Log.i(TAG, "receiver ACTION");}}};}
2、AndroidManifest.xml 服務配置
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"package="kim.hsl.bp"><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme"><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><!-- AlarmManager 保持 CPU 喚醒的 Service 服務 --><serviceandroid:name=".AlarmManagerService"android:process=":alrmmanager" /></application></manifest>
40:51
四、源碼及資源下載
源碼及資源下載地址 :
-
① GitHub 工程地址 : Battery_Performance
-
② 使用 AlarmManager 保持 CPU 喚醒 Service 代碼地址 : AlarmManagerService.java
-
③ AndroidManifest.xml 配置文件地址 : AndroidManifest.xml
總結
以上是生活随笔為你收集整理的【Android 电量优化】电量优化 ( 使用 AlarmManager 保持 CPU 唤醒 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Android 电量优化】电量优化 (
- 下一篇: 【Android 电量优化】电量优化 (