这种问题很正常,或者说这本来就不是问题,是Android的休眠机制。锁屏后系统会逐渐进入休眠状态,这个逐渐依据不同设备的具体情况而不同,一般从立即到几分钟之间。进入休眠状态后,用户进程会无法被分配到CPU时间,也就是说代码没法执行。这样节省了大量的电力。
这样就造成了,你如果想要写一个另开线程自动更新的服务,在机器休眠以后,你的代码没法运行,更新会中断,如果你用的是socket连接,连接也会断掉。
如果用Alarm来定时更新,也可能会遇到问题,要看你利用的方式方法了,能否在休眠中也能被分配到CPU时间。
我以前遇到这种问题,研究了几天后发现用AlarmManager的setInexactRepeating方法,第一个参数传入AlarmManager.RTC_WAKEUP,让这个PendingIntent发动的时唤醒系统。可以在这个PendingIntent的处理过程中,让你的程序获得CPU时间。
经过大量测试,(由于插USB打logcat测试会让机器不休眠无法测试出真实效果,我采用输出日志文件的办法来测试)我这种办法是可行的,休眠中也是可以工作,连续测试10几个小时也工作正常。但是我是1分钟定时更新,也试过10几秒的,还没测试过你所说的6秒。
附上我的服务代码,如果看到注释是乱码,Eclipse的编码设UTF-8就行了。
这样可以么?