正如很多博客所说,我做了个试验,确实是这样,以下几种计时方法的缺点:
1.循环的Thread+sleep方法,这种方式最容易被回收,而且待机时很容易被停止。
2.Timer,这种方式稍好,但是后台运行待机时,如果拔掉usb线,计时过一会也会被暂停。
3.AlarmManager,这种方式可靠,计时不会被暂停。只是代码写起来更麻烦。
然后就是时钟问题了,我们用来计时的方法经常是System.currentTimeMillis,但这个方法可以被系统或其它应用所修改。前两种方式用的就是这个时钟,还有可以用SystemClock类来计时。其提供了几种更可靠的计时方式。第三种方式可以设置为SystemClock来计时,所以能够保证在待机状态下计时的可靠性。