本帖最后由 JebySin 于 2014-05-30 19:13:32 编辑

解决方案 »

  1.   

    最近开发遇到一个需求,要求应用在后台一直按给定的时间间隔重复访问网络。
    网上查资料,因此用到了AlarmManage。做出来后发现有缺陷,即:执行的频率在屏幕熄灭后变得很不稳定。比如,每隔10秒执行一次,屏幕熄灭后就出现有时每隔2秒,有时每隔16秒......
    注意需用真机测试,并且不要链接数据线,屏幕熄灭后才会出现这个情况。
    这个是什么情况,百思不得骑姐,求指教。
    我也不会,帮你顶一下吧
      

  2.   

    我以前做一个定时器也碰到过类似的问题,
    我的解决方案是做一个后台服务,并注册广播。
    注意参数AlarmManager.RTC_WAKEUP和AlarmManager.ELAPSED_REALTIME_WAKEUP。
    详细的我不是很记得。
      

  3.   

    AlarmManage 放到服务里试试
    或者使用线程来控制
      

  4.   

    我之前的项目是用服务控制线程实现的  因为服务容易起来  然后就去启动线程执行任务
    另外  你说的 AlarmManager时间不准  可能是你使用的时钟类型不对
    AlarmManager.ELAPSED_REALTIME表示闹钟在手机睡眠状态下不可用
    AlarmManager.ELAPSED_REALTIME_WAKEUP表示闹钟在睡眠状态下会唤醒系统并执行提示功能
    AlarmManager.RTC表示闹钟在睡眠状态下不可用,该状态下闹钟使用绝对时间
    AlarmManager.RTC_WAKEUP表示闹钟在睡眠状态下会唤醒系统并执行提示功能,该状态下闹钟使用绝对时间前2个是相对时间  即相对系统起来的时间   所以使用间隔定时的闹钟   使用前两个  根据需要选择是否在休眠状态下也触发
    后2个是绝对时间  即某年某月某日  时分秒  具体的时间点触发的事件使用这个  当然  定时间隔的也可以相对时间是不会随设置时间日期改变的最后有个NB的AlarmManager.POWER_OFF_WAKEUP,不过有提到不能用的情况,你可以试试
      

  5.   

    谢谢各位,我就是服务里面用的AlarmManager执行任务。
    我分析是由于屏幕熄灭后手机休眠就停止了服务,但是由于我的服务onStartCommand方法参数是START_STICKY,服务接着又重启。
    目前的解决办法是不让手机休眠,保持手机CPU唤醒,但这样有可能对手机待机时间造成影响。
      

  6.   

    我在service中,使用alarmManager 注册广播,使用BorcastRecevier来接收,然后启动service;你可以试试;我觉得主要的onstartcommond的返回值导致的时间不准确的问题;