Android 電量優化】電量優化 ( 使用 AlarmManager 保持 CPU 喚醒 )

      網友投稿 1061 2022-05-30

      文章目錄

      一、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() { @Override public void onReceive(Context context, Intent intent) { // 獲取廣播事件 String action = intent.getAction(); if(TextUtils.equals("ACTION", action)){ Log.i(TAG, "receiver ACTION"); } } };

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      ② 注冊廣播接收者 : 注冊上述創建的廣播接收者 , 注冊接收 ACTION 廣播 ;

      IntentFilter intentFilter = new IntentFilter("ACTION"); registerReceiver( receiver, intentFilter);

      1

      2

      ③ 創建延遲意圖 : 首先創建普通的 Intent 意圖 , 然后設置 ACTION 事件 , 根據該 Intent 創建延遲意圖 PendingIntent ;

      mAlarmIntent = new Intent(); mAlarmIntent.setAction("ACTION"); PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, mAlarmIntent, 0);

      1

      2

      3

      ④ 鬧鐘管理器設置 : 獲取鬧鐘管理器 AlarmManager , 并設置每隔 50 秒發送一次廣播 , 廣播接收者接收到該意圖 , 就會處理對應事件 ;

      // 獲取鬧鐘管理器 mAlarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); // 設置鬧鐘管理器每隔 50 秒發送一次延遲意圖 mAlarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(), 50000, pendingIntent);

      1

      2

      3

      4

      5

      三、使用 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 @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { super.onCreate(); // 使用鬧鐘管理器保持 CPU 喚醒 alarmKeep(); } @Override public 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() { @Override public void onReceive(Context context, Intent intent) { // 獲取廣播事件 String action = intent.getAction(); if(TextUtils.equals("ACTION", action)){ Log.i(TAG, "receiver ACTION"); } } }; }

      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

      61

      62

      63

      64

      65

      66

      67

      68

      69

      70

      71

      72

      73

      74

      75

      76

      77

      78

      79

      2、AndroidManifest.xml 服務配置

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      【Android 電量優化】電量優化 ( 使用 AlarmManager 保持 CPU 喚醒 )

      21

      22

      23

      24

      25

      26

      27

      40:51

      四、源碼及資源下載

      源碼及資源- :

      ① GitHub 工程地址 : Battery_Performance

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

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

      Android

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

      上一篇:華為云IoT設備接入管理服務常見問題之設備管理&異常定位類問題解答手冊
      下一篇:MybatisPlus多數據源配置
      相關文章
      国产AV无码专区亚洲精品| 亚洲第一成年网站大全亚洲| 亚洲国产无套无码av电影| 亚洲成在人线在线播放无码| 久久精品国产亚洲AV无码娇色| 亚洲AV无码一区东京热久久| 久久综合日韩亚洲精品色| 国产亚洲精品xxx| 亚洲伊人久久综合影院| 久久亚洲国产成人影院网站| 亚洲男人在线无码视频| 亚洲精品国产成人影院| 久久精品国产亚洲精品| 中文亚洲AV片不卡在线观看| 国产亚洲成av片在线观看| 久久亚洲国产中v天仙www| 好看的电影网站亚洲一区| 亚洲av无码国产精品色午夜字幕| 亚洲精品少妇30p| 亚洲久本草在线中文字幕| 久久av无码专区亚洲av桃花岛| 亚洲熟妇色自偷自拍另类| 亚洲妓女综合网99| 亚洲综合无码无在线观看| 中文字幕乱码亚洲无线三区| 亚洲AV无码成人精品区狼人影院| 日韩国产精品亚洲а∨天堂免| 成人亚洲综合天堂| 亚洲精品视频在线看| 亚洲一区精品无码| 亚洲AV人人澡人人爽人人夜夜| 亚洲精品亚洲人成在线观看麻豆 | 中文字幕亚洲综合小综合在线| 亚洲国产成a人v在线观看| 亚洲AV无码一区二区大桥未久| 亚洲片一区二区三区| 国产亚洲婷婷香蕉久久精品 | 亚洲av成人一区二区三区在线观看 | 中文字幕不卡亚洲| 亚洲av无码片在线播放| 亚洲福利电影一区二区?|