博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android 两种定时器的实现
阅读量:5261 次
发布时间:2019-06-14

本文共 1052 字,大约阅读时间需要 3 分钟。

 

在Android上常用的定时器有两种,一种是Java.util. Timer,一种就是系统的AlarmService了。 
实验1:使用Java.util.Timer。 
在onStart()创创建Timer,每5秒更新一次计数器,并启动。 
 
Java代码 
1
2
3
4
5
6
7
8
mTimer =
new
Timer();       
mTimer.schedule(
new
TimerTask() {           
            
@Override
            
public
void
run() {
                
++mCount;
                
mHandler.sendEmptyMessage(
0
);               
            
}
        
},
5
*
1000
,
5
*
1000
);
  
当连接USB线进行调试时,会发现一切工作正常,每5秒更新一次界面,即使是按下电源键,仍然会5秒触发一次。 
当拔掉USB线,按下电源键关闭屏幕后,过一段时间再打开,发现定时器明显没有继续计数,停留在了关闭电源键时的数字。 
实验2:使用AlarmService: 
2.1通过AlarmService每个5秒发送一个广播,setRepeating时的类型为AlarmManager.ELAPSED_REALTIME。 
 
Java代码 
1
2
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);  
am.setRepeating(AlarmManager.ELAPSED_REALTIME, firstTime,
5
*
1000
, sender);
拔掉USB线,按下电源键,过一段时间再次打开屏幕,发现定时器没有继续计数。 
2.2setRepeating是的类型设置为AlarmManager.ELAPSED_REALTIME_WAKEUP 
 
Java代码 
1
2
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);   
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime,
5
*
1000
, sender);
拔掉USB线,按下电源键,过一点时间再次打开屏幕,发现定时器一直在计数。 
如此看来,使用WAKEUP才能保证自己想要的定时器一直工作,但是肯定会引起耗电量的增加。

转载于:https://www.cnblogs.com/WalsonWang/p/4720821.html

你可能感兴趣的文章
BZOJ 题目1036: [ZJOI2008]树的统计Count(Link Cut Tree,改动点权求两个最大值和最大值)...
查看>>
《深入分析Java Web技术内幕》读书笔记之JVM内存管理
查看>>
python之GIL release (I/O open(file) socket time.sleep)
查看>>
网络穿透
查看>>
2015/8/4 告别飞思卡尔,抛下包袱上路
查看>>
软件开发与模型
查看>>
Codeforces Round #306 (Div. 2) A
查看>>
161017、SQL必备知识点
查看>>
hdu 1541Stars
查看>>
kill新号专题
查看>>
MVC学习系列——Model验证扩展
查看>>
C# GC 垃圾回收机制
查看>>
mysqladmin 修改和 初始化密码
查看>>
字符串
查看>>
vue2.x directive - 限制input只能输入正整数
查看>>
实现MyLinkedList类深入理解LinkedList
查看>>
自定义返回模型
查看>>
使用Git、Git GUI和TortoiseGit
查看>>
C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 客户端多网络支持
查看>>
阴影:box_shadow
查看>>