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

网友投稿 835 2022-05-30

文章目录

一、AlarmManager 简介

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

三、使用 WeakLock 保持 CPU 唤醒 代码示例

1、Service 代码示例

2、AndroidManifest.xml 服务配置

四、源码及资源下载

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

参考 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

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小时内删除侵权内容。

上一篇:VUE之v-model指令
下一篇:【Google Play】App Bundle 使用详解 ( 简介 | 应用内更新 | 即时更新 | 灵活更新 )
相关文章