Straight from the Android docs for Timer
:
With fixed-rate execution, the start time of each successive run of a task is scheduled without regard for when the previous run took place. This may result in a series of bunched-up runs (one launched immediately after another) if delays prevent the timer from starting tasks on time.
It's impossible to explain the specific behavior you're observing without knowing a lot more about your code than you have posted, but the above is probably what's going on.
You probably want to be using fixed-period scheduling, which according to the docs, behaves more like what you seem to want:
With the default fixed-period execution, each successive run of a task is scheduled relative to the start time of the previous run, so two runs are never fired closer together in time than the specified period.