I try to develop a simple timer beeper, that peep hourly. For the timing I use a Service and handler, here the example:
    void onStart(...){
        handler.postDelayed(timerRunnable, ONE_HOUR);
    }
    private Runnable timerRunnable = new Runnable() {
    @Override
        public void run() {
               ...beep
               handler.postDelayed(timerRunnable, ONE_HOUR);
        }
    };
but run() method will be fired nondeterministic, I think it is dependent from the current device usage.
I have try the same scenario with TimerTask and with 'manualy' Thread implementation, but with the same nondeterministic result.