日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

【Android 电量优化】电量优化 ( 使用 AlarmManager 保持 CPU 唤醒 )

發(fā)布時(shí)間:2025/6/17 Android 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Android 电量优化】电量优化 ( 使用 AlarmManager 保持 CPU 唤醒 ) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 一、AlarmManager 簡(jiǎn)介
  • 二、使用 AlarmManager 保持 CPU 喚醒流程 ( 省電操作 )
  • 三、使用 WeakLock 保持 CPU 喚醒 代碼示例
    • 1、Service 代碼示例
    • 2、AndroidManifest.xml 服務(wù)配置
  • 四、源碼及資源下載



參考 Google 官方文檔 :

  • 優(yōu)化電池續(xù)航時(shí)間
  • 管理設(shè)備喚醒狀態(tài)
  • 使設(shè)備保持喚醒狀態(tài)
  • 設(shè)置重復(fù)鬧鈴時(shí)間

上一篇博客 【Android 電量?jī)?yōu)化】電量?jī)?yōu)化 ( 喚醒鎖定 | 使用 WeakLock 保持服務(wù)喚醒 | 屏幕喚醒 ) 中 , 使用 WeakLock 保持 CPU 喚醒 , 全程 CPU 都處于工作狀態(tài) , 該操作耗電量非常大 ;

AlarmManager 可以一定程度上替代上述 WeakLock , 并且可以穩(wěn)定每隔一段時(shí)間喚醒 CPU , 避免了 CPU 全程喚醒的情況 , 同時(shí)也降低了耗電量 ;





一、AlarmManager 簡(jiǎn)介



AlarmManager 簡(jiǎn)介 :


① 激活時(shí)間 : AlarmManager 可以脫離于應(yīng)用生命周期限制 , 每隔一段時(shí)間 , 定期執(zhí)行任務(wù) ; 即使應(yīng)用沒(méi)有執(zhí)行 , 或者手機(jī)處于休眠狀態(tài) , 也可以觸發(fā)執(zhí)行操作 ;

② 間隔設(shè)定 : 開(kāi)發(fā)者可以設(shè)定觸發(fā)任務(wù)執(zhí)行的周期 , 該任務(wù)一般是通過(guò)發(fā)送延遲意圖 PendingIntent 實(shí)現(xiàn) ;

③ 廣播接收者 : 一般使用 AlarmManager 定時(shí)發(fā)送 延遲意圖 PendingIntent 給廣播接收者 , 在廣播接收者中啟動(dòng)服務(wù) , 或者執(zhí)行其它任務(wù) ;

④ 降低資源消耗 : 如上述保持 CPU 喚醒 , 全程耗電 , 使用 AlarmManager 每隔一段時(shí)間 , 喚醒一次 , 執(zhí)行任務(wù) , 然后繼續(xù)休眠 , 可以極大降低資源消耗 ;





二、使用 AlarmManager 保持 CPU 喚醒流程 ( 省電操作 )



使用 AlarmManager 保持 CPU 處于喚醒狀態(tài) , 比使用 WeakLock 更省電 ;


使用 AlarmManager 保持 CPU 喚醒流程 :


① 創(chuàng)建自定義廣播接收者 : 這里為了簡(jiǎn)單 , 在 Service 中簡(jiǎn)單創(chuàng)建一個(gè)廣播接收者 , 處理 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");}}};

② 注冊(cè)廣播接收者 : 注冊(cè)上述創(chuàng)建的廣播接收者 , 注冊(cè)接收 ACTION 廣播 ;

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

③ 創(chuàng)建延遲意圖 : 首先創(chuàng)建普通的 Intent 意圖 , 然后設(shè)置 ACTION 事件 , 根據(jù)該 Intent 創(chuàng)建延遲意圖 PendingIntent ;

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

④ 鬧鐘管理器設(shè)置 : 獲取鬧鐘管理器 AlarmManager , 并設(shè)置每隔 50 秒發(fā)送一次廣播 , 廣播接收者接收到該意圖 , 就會(huì)處理對(duì)應(yīng)事件 ;

// 獲取鬧鐘管理器 mAlarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); // 設(shè)置鬧鐘管理器每隔 50 秒發(fā)送一次延遲意圖 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(){// 注冊(cè)廣播接受者IntentFilter intentFilter = new IntentFilter("ACTION");registerReceiver( receiver, intentFilter);// 創(chuàng)建延遲意圖mAlarmIntent = new Intent();mAlarmIntent.setAction("ACTION");PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, mAlarmIntent, 0);// 獲取鬧鐘管理器, 并設(shè)置每隔 50 秒發(fā)送一次廣播mAlarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);mAlarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(), 50000, pendingIntent);}/*** 接收上面每隔 5 秒發(fā)送的廣播*/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 服務(wù)配置



<?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 服務(wù) --><serviceandroid:name=".AlarmManagerService"android:process=":alrmmanager" /></application></manifest>

40:51





四、源碼及資源下載



源碼及資源下載地址 :

  • ① GitHub 工程地址 : Battery_Performance

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

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

總結(jié)

以上是生活随笔為你收集整理的【Android 电量优化】电量优化 ( 使用 AlarmManager 保持 CPU 唤醒 )的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。