Why is a Timer on Android more accurate when a finger is touching the screen?

  

In Delphi 10.1 Berlin, I’m making an Android app. I created a timer like this:

fTimer := TTimer.Create(nil);
fTimer.Interval := 1;
fTimer.OnTimer := OnTimer;
fTimer.Enabled := True;

In the OnTimer event, I simply do this:

procedure TMyForm.OnTimer(Sender: TObject);
begin
MyStopWatch.Stop;
Inc(acounter);
if acounter mod 1000 = 0 then
allog(‘delay’, FloatToStr(xStopWatch.Elapsed.TotalMilliseconds));
MyStopWatch := TStopWatch.StartNew;
end;

When I launch the app, the OnTimer event is fired every 10 ms instead of every 1 ms. However, if I touch the screen and move my finger around it, the event is fired every 1.3-1.5 ms instead.

Can someone explain this strange behavior to me?

Why is the app (or at least the timer) more reactive when my finger is touching the screen? How do I make the app always be this reactive?

About the remark of J..

it’s not baterry life i think (but i m not sure) because if I use a thread instead of a timer like this :

TThread.createAnonymousThread(
procedure
var MyStopWatch: TstopWatch;
acounter: integer;
begin

acounter := 0;
MyStopWatch := TStopWatch.StartNew;

while True do begin
TThread.synchronize(nil,
procedure
begin
MyStopWatch.Stop;
Inc(acounter);
if acounter mod 1000 = 0 then
allog(‘delay’, FloatToStr(MyStopWatch.Elapsed.TotalMilliseconds));
MyStopWatch := TStopWatch.StartNew;
end);
sleep(1);
END;

end).start;

Then it’s work ok, the event is fired every 2 ms (without TThread.synchronize every 1ms), and this finger or not on the screen.

Comments are closed.