Alarm机制-学习记录
整理自《第一行代码》
由于手机的休眠策略,Android会在长时间不操作的情况下自动让CPU进入到睡眠状态。
Alrarm具有唤醒CPU的功能,它可以保证在大多数情况下需要执行定时任务的时候CPU都能正常工作。
注意是唤醒CPU不是唤醒屏幕。
Alarm机制
主要用AlarmManager类实现,通过调用Context的getSystemService()方法来获取实例。
AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
获取到实例后,调用AlarmManager的set()方法就可以设置一个定时任务。
manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,SystemClock.elapsedRealtime()+10*1000,pendingIntent);
set()方法有三个参数:
参数一:整型 AlarmManager的工作模式/类型。
有四种类型可选:
ELAPSED_REALTIME 表示让定时任务的触发时间从系统开机开始算起 不会唤醒CPU
ELAPSED_REALTIME_WAKEUP 同上 但是会唤醒CPU
RTC 表示让定时任务的出发时间从1970/1/1 00:00开始算起 不会唤醒CPU
REC_WAKEUP 同上 会唤醒CPU
PS:
使用SystemClock.elapsedRealtime()方法可以获取到系统开机至今所经历时间的毫秒数。
使用System.currentTimeMillis()方法可以获取到1970/1/1 00:00至今所经历时间的毫秒数。
参数二:长整型 任务触发的事件,单位是毫秒。
这个一看就懂,古不做记录
参数三:延迟意图 PendingIntent
调用 getService()/getBoradcast() 来获取一个能够被执行的PendingIntent。
当定时任务被触发时,服务在onStartCommand()方法/广播接收器的onReceive()方法 中执行。
示例:每过10秒自动启动一次的服务
public class LongRunningService extends Service {@Nullable @Override public IBinder onBind(Intent intent) {return null;}@Override public int onStartCommand(Intent intent, int flags, int startId) {new Thread(new Runnable() {@Override public void run() { // 这里执行具体的逻辑操作 Log.d("FUCK", "香香的感觉,可带劲啦!");}}).start();/*这里不能忘记start*/ AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);int anHour = 10 * 1000;/*定时10秒*/ long triggerAtTime = System.currentTimeMillis() + anHour;Intent intent1 = new Intent(this, LongRunningService.class);PendingIntent pendingIntent = PendingIntent.getService(this, 0, intent1, 0);alarmManager.setExact(AlarmManager.RTC_WAKEUP, triggerAtTime, pendingIntent);return super.onStartCommand(intent, flags, startId);} }
注意不要忘记注册服务
<service android:name=".service.LongRunningService"/>
最后就是启动服务了
在主活动中:
public class MainActivity extends AppCompatActivity {@Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Intent intent = new Intent(this, LongRunningService.class);this.startService(intent);Log.d("FUCK", "服务启动");} }
即可实现每10秒再启动一次。
Doze模式
Android6.0之后,Google加入了一个全新的Doze模式,从而可以极大幅度地延长电池的使用寿命。
如果设备未充电,并处于静止状态(7.0中删除了这一条件),且屏幕关闭了一段时间后,就能进入到Doze模式。
在Doze模式下,系统会对CPU、网络、Alarm等活动进行限制,从而延长电池的使用寿命。当然,系统并不会一直处于Doze模式,而是会间歇性地退出Doze模式一小段时间,在这段时间中,应用就可以去完成它的同步操作、Alarm任务等。
Doze模式的工作过程:
在Doze模式下会受到限制的功能:
- 网络访问被禁止。
- 系统忽略唤醒CPU或者屏幕操作。
- 系统不再执行WIFI扫描。
- 系统不再执行同步服务。
- Alarm任务将会在下次退出Doze模式的时候执行。
PS:如果你要求Alarm任务即使在Doze模式下也必须正常执行,Android提供了解决方案:
调用AlarmManager的setAndAllowWhileIdle()或者setExactAndAllowWhileIdle()方法就能让定时任务即使在Doze模式下也能正常执行。
Alarm机制-学习记录相关推荐
- Attention机制学习记录(四)之Transformer
前言 注意力(Attention)机制[2]由Bengio团队与2014年提出并在近年广泛的应用在深度学习中的各个领域,例如在计算机视觉方向用于捕捉图像上的感受野,或者NLP中用于定位关键token或 ...
- 【Python学习记录】Numpy广播机制(broadcast)
✨ 博客主页:小小马车夫的主页 ✨ 所属专栏:Python学习记录 文章目录 一.什么是Numpy广播机制 二.Numpy广播应用 三.Numpy广播规则 一.什么是Numpy广播机制 在Numpy. ...
- 关于ATIS以及基于注意力机制的递归神经网络模型 的学习记录
关于ATIS以及基于注意力机制的递归神经网络模型 的学习记录 此为本人学习的类笔记,主要内容为借助Google翻译机译的论文WHAT IS LEFT TO BE UNDERSTOOD IN ATIS? ...
- ASP.NETCore学习记录(一)
ASP.NETCore学习记录(一) asp.net core介绍 Startup.cs ConfigureServices Configure 0. ASP.NETCore 介绍 ASP.N ...
- Android开发技术周报176学习记录
Android开发技术周报176学习记录 教程 当 OkHttp 遇上 Http 2.0 http://fucknmb.com/2018/04/16/%E5%BD%93OkHttp%E9%81%87% ...
- Redis的学习记录
Redis的学习记录 1.先导了解 1.1 NOSQL概述 1.1.1 为什么要用NoSql? 1.1.2 NoSql了解 1.1.3 NoSql特点 1.1.4 NoSQL的四大分类 2. Redi ...
- 浏览器缓存机制学习总结
浏览器缓存机制学习总结 最近在做一个考试系统时,由于经常加载试卷或图片等等静态资源,抽空学习了一下缓存机制,在此记录 为什么要使用缓存 1.通过HTTP协议,在客户端和浏览器建立连接时需要消耗时间,而 ...
- 王爽 16 位汇编语言学习记录
以下为汇编学习记录,内容全部出自王爽的16位<汇编语言>,如有错误,可直接去查看原书. 汇编语言 机器语言是机器指令集的集合,机器指令是一列二进制数字,计算机将其翻译成高低电平,从而使 ...
- Shiro学习记录(详细)
文章目录 Shiro学习记录 shiro核心组件 Spring Boot 整合 Shiro Shiro 整合 Thymeleaf Shiro学习记录 什么是 Shiro 官网:http://shiro ...
最新文章
- 机器学习PAL基本概念
- C++中判断在字符串中是否存在空格 以及 如何输入带空格的字符串
- 字节还有打游戏、听音乐这种神仙工作?
- PHP基础知识------页面静态化
- tas5707php,TAS5707PHP
- 手把手教你如何创造睡后收入
- C++保留小数点后两位
- 《新编计算机科学概论》一2.5 计算机软件系统
- 计算机硬盘储存怎么增加,如何扩大存储空间?电脑扩大新添加的硬盘的方法
- (文献随笔)肿瘤浸润的活化B细胞抑制结直肠癌的肝转移(Cell Report, 2022年8月30日)
- 免签接口 个人二维码收款系统/微信支付支付宝支付二维码监听自动发货/个人免签系统/个人免签支付 微信.支付宝 个人支付监控
- LINUX下USB1.1设备学习小记(5)_uhci与设备(2)
- ASO优化:为什么要做APP竞品分析
- CSS基础(13)- 更多的选择器
- GO工具开发|基于网站API的子域名与IP反查工具(二)
- MP1584EN降压型转换器学习
- 【学习进度】截至2022.9.6,已学习的C++知识
- 赛迪智库:政务数据不愿共享的成因及对策
- Open3d(三)——网格数据操作
- RSocket协议初识-Java中使用(二)