andorid thread使用sleep方法遇到的问题.

山城忙碌人 2015-01-27 10:28:31
1 需求描述。
我的闹钟要实现重复播放,比如周一至周五早上七点触发闹钟广播,然后每天早上七点,闹钟重复播放三次(这里是动态设置的,最少一次,最多10次),每次间隔五分钟,并且在播放第二次的时候,我可以取消剩下未播放的闹钟(类似android自带的闹钟),我使用了thread的sleep方法来做重复播放三次的工作。
2 问题描述。
每天早上7点,能接收到系统发出的广播,第一次闹钟能正常播放,但间隔五分钟基本都不准,基本上都间隔了40分钟后线程才会被继续执行,奇怪的是这个问题只有早上才会出现,如果我白天设置闹钟,每次间隔都不会出问题。我怀疑是不是anodrid在锁屏状态达到几个小时后,thread的sleep方法有误差.

3 代理如下.
while (playCount < bean.getaPlayCount()) {
Util.printErrorLog( "playCount:"+playCount+",interval,"+bean.getaIntervalTime()+",播放总数:"+bean.getaPlayCount());
try {
Thread.sleep(1000*60*5);
} catch (InterruptedException e) {
e.printStackTrace();
Util.printErrorLog("控制线程播放次数出现异常!"+e.getMessage());
}
......
}
输出的日志正常,但实际的间隔时间就是不对.

...全文
502 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
开发者_android 2015-01-28
  • 打赏
  • 举报
回复
引用 5 楼 bisubisu 的回复:
[quote=引用 4 楼 dalor 的回复:] 觉得这种方法不好,可以实现的方法有很多嘛~
请问用什么方法? 我觉得这方法也不对,不能用thread.sleep,我准备借助SharedPreferences,在每天闹钟第一次播放的时候,记录一下,然后再判断当前播放次数和总次数,最后来决定来做业务![/quote] 还是用service比较好,就像你说的,在锁屏待机的情况下,后台必须实时监控。而service就可以常驻,通过broadcast接收消息,配合timer,timertask进行。。。
  • 打赏
  • 举报
回复
同楼上的意见,推荐用Timer 定时器来做试试,方便很多的。
山城忙碌人 2015-01-28
  • 打赏
  • 举报
回复
引用 1 楼 birdsaction 的回复:
这个要看你启动是什么时候的了,比如你启动刚好是整点,线程sleep一次 1000*60*5 5分钟 1个小时刚好12次,如果不是整点启动的 那就不一定准了。 你这个线程是放在Service里面的么? CPU在繁忙的时候 可能调度不准确
我准备换种方式处理,可能是这种处理方式不对。我借助SharedPreferences来做这件事!
山城忙碌人 2015-01-28
  • 打赏
  • 举报
回复
引用 3 楼 heaimnmn 的回复:
这估计只有debug线程看了,看看什么原因造成延迟
谢谢,可能是我方法不对。在android里,锁屏状态达到几个小时后,有些手机使用sleep方法会不准!
山城忙碌人 2015-01-28
  • 打赏
  • 举报
回复
引用 4 楼 dalor 的回复:
觉得这种方法不好,可以实现的方法有很多嘛~
请问用什么方法? 我觉得这方法也不对,不能用thread.sleep,我准备借助SharedPreferences,在每天闹钟第一次播放的时候,记录一下,然后再判断当前播放次数和总次数,最后来决定来做业务!
山城忙碌人 2015-01-28
  • 打赏
  • 举报
回复
引用 9 楼 dalor 的回复:
[quote=引用 5 楼 bisubisu 的回复:] [quote=引用 4 楼 dalor 的回复:] 觉得这种方法不好,可以实现的方法有很多嘛~
请问用什么方法? 我觉得这方法也不对,不能用thread.sleep,我准备借助SharedPreferences,在每天闹钟第一次播放的时候,记录一下,然后再判断当前播放次数和总次数,最后来决定来做业务![/quote] 还是用service比较好,就像你说的,在锁屏待机的情况下,后台必须实时监控。而service就可以常驻,通过broadcast接收消息,配合timer,timertask进行。。。[/quote] 谢谢,我今天用SharedPreferences来保存播放数量,然后根据播放数量来判断,是否启用下一个闹钟!
开发者_android 2015-01-27
  • 打赏
  • 举报
回复
觉得这种方法不好,可以实现的方法有很多嘛~
哎,真难 2015-01-27
  • 打赏
  • 举报
回复
这估计只有debug线程看了,看看什么原因造成延迟
sagittarius1988 2015-01-27
  • 打赏
  • 举报
回复
知道线程优先级不?
Birds2018 2015-01-27
  • 打赏
  • 举报
回复
这个要看你启动是什么时候的了,比如你启动刚好是整点,线程sleep一次 1000*60*5 5分钟 1个小时刚好12次,如果不是整点启动的 那就不一定准了。 你这个线程是放在Service里面的么? CPU在繁忙的时候 可能调度不准确

80,471

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧