Thanks Dianne - I realized it had to be a cpu sleep issue about five minutes after I posted the question.
Mark Peters On Saturday, July 14, 2012 3:54:18 PM UTC-7, Dianne Hackborn wrote: > > Note that these times are *uptime*. If the screen is off, and nobody is > holding a wakelock, then the CPU will go to sleep, and uptime will stop > counting until it wakes up again. > > On Fri, Jul 13, 2012 at 9:24 AM, mapeters wrote: > >> I have a thread (guts implemented as a subclass of Runnable) whose job is >> to perform an operation on demand from other threads or automatically every >> two minutes if no other thread invokes the operation. The run() method of >> this Runnable calls Looper.prepare(), creates a Handler object in a member >> variable, uses that to call sendEmptyMessageDelayed(1, 3000), then calls >> Looper.loop(). >> >> Other threads use a method in this thread's public API to invoke its >> operation. That method just calls the handler's sendEmptyMessage(0) method >> to invoke it. When the handler's handleMessage(Message) method is called, >> it acquires a lock (ReentrantLock), calls the handler's >> removeCallbacksAndMessages(null) method and performs its operation (within >> a try/catch block). The finally section of that block calls the handler's >> sendEmptyMessageDelayed(1, 120000) method then releases the lock. >> >> This works fine on every device I have tested it on, and by everything I >> know, it is a valid way to do this that ought to work on every version of >> Android OS. Recently, however, somebody claimed it wasn't running every two >> minutes as it should, and gave me the log file it produces to prove it >> (which it does). That log shows that sendEmptyMessageDelayed(1, 120000) was >> called, and then 11 minutes later, the handleMessage(Message) method was >> called. I know this invocation of handleMessage() was in response to that >> sendEmptyMessageDelayed(1, 120000) call because Message.what was 1 (a value >> used only by the sendEmptyMessageDelayed() call). >> >> How is this possible? I could understand the timing being off by a few >> seconds, but 11 minutes? In subsequent attempts to reproduce this, I have >> seen that timing being off by 45 minutes and more. This problem has been >> observed on an HTC One X running Android 4.0.3 and a Samsung Galaxy SII >> running OS 2.3.6. >> >> Has anybody else seen this issue? Does anybody have a suggestion for what >> might be causing this? My current position is that this is an OS bug, but I >> am loathe to just accept that and call it a day. BTW - just for kicks, I >> temporarily re-implemented this using a Timer object instead, and observed >> exactly the same problem (using Handler is a better solution anyway). >> >> Thanks, >> >> Mark Peters >> >> -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en

