Android解决CPU休眠Timer不执行

在开发中,有时我们需要在后台循环执行一些操作(比如:定时任务、即时通讯心跳包的发送等)

结果发现手机发生锁屏的操作后,CPU进入休眠,导致TimerTask不工作,直到解锁屏幕CPU被唤醒后,Timer才继续执行

解决方案:

(1)获取电源锁,让CPU不休眠(耗电严重)
(2)使用AlarmManager代替Timer

说明:Android手机有两个处理器,一个叫Application Processor(AP),一个叫Baseband Processor(BP)。AP是ARM架构的处理器,用于运行Linux+Android系统;BP用于运行实时操作系统(RTOS)。AlarmManager 是 Android 系统封装的用于管理 RTC 的模块,RTC (Real Time Clock) 是一个独立的硬件时钟,可以在 CPU 休眠时正常运行,在预设的时间到达时,通过中断唤醒 CPU。

AlarmManager使用代码:

Intent intent = new Intent();
intent.setAction("");
PendingIntent sender = PendingIntent.getBroadcast(this, 0, intent, 0);
AlarmManager alarm = (AlarmManager) getSystemService(ALARM_SERVICE);
alarm.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), 1000 * 10, sender);

清单文件注册:

<receiver android:name="">
    <intent-filter>
        <action android:name="" />
    </intent-filter>
</receiver>
上一篇 Android申请电源锁与释放电源锁
下一篇 Android 加载GIF图最佳实践方案
目录
文章列表
1 Swift UI - 将表格UITableView滚动条移动到底部
Swift UI - 将表格UITableView滚动条移动到底部
2
curl测试dns解析时间及tcp连接时间
curl测试dns解析时间及tcp连接时间
3
SynchronizedMap和ConcurrentHashMap之同步方式比较
SynchronizedMap和ConcurrentHashMap之同步方式比较
4
OKHttp3学习之七:文件下载(拦截器方式)
OKHttp3学习之七:文件下载(拦截器方式)
5
Python实现Redis不同实例间数据迁移
Python实现Redis不同实例间数据迁移
最新评论
一位WordPress评论者
一位WordPress评论者
2月12日
您好,这是一条评论。若需要审核、编辑或删除评论,请访问仪表盘的评论界面。评论者头像来自 Gravatar。