在 Delphi 10.1 Berlin,我正在制作一个 Android 应用程序。我创建了一个这样的计时器:
fTimer := TTimer.Create(nil);
fTimer.Interval := 1;
fTimer.OnTimer := OnTimer;
fTimer.Enabled := True;
在这种情况OnTimer
下,我只是这样做:
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;
当我启动应用程序时,该OnTimer
事件每 10 毫秒触发一次,而不是每 1 毫秒触发一次。但是,如果我触摸屏幕并在其周围移动手指,则会改为每 1.3-1.5 毫秒触发一次事件。
有人可以向我解释这种奇怪的行为吗?
为什么当我的手指触摸屏幕时应用程序(或至少是计时器)更具反应性?如何使应用程序始终保持这种反应性?
关于J..的言论
我认为这不是电池寿命(但我不确定),因为如果我使用线程而不是这样的计时器:
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;
然后就可以了,事件每 2 毫秒触发一次(没有 TThread.synchronize 每 1 毫秒),并且这个手指或不在屏幕上。