标签: android-timer

Android计时器计划

以下是我在项目中用于安排任务的代码片段

mTimer = new Timer();
mTimer.schedule(new TimerTask() {

 @Override
 public void run() {
  //Do Something
 }

}, interval, interval);
Run Code Online (Sandbox Code Playgroud)

这很好用.我提到间隔后得到事件.但如果将日期设置为小于设置中的当前值,则无法发送任何事件.

有谁知道为什么会发生这种行为?

android timer scheduled-tasks task android-timer

7
推荐指数
1
解决办法
6268
查看次数

当手指触摸屏幕时,为什么Android上的Timer会更准确?

在Delphi 10.1柏林,我正在制作一个Android应用程序.我创建了一个这样的计时器:

fTimer := TTimer.Create(nil);
fTimer.Interval := 1;
fTimer.OnTimer := OnTimer;
fTimer.Enabled := True;
Run Code Online (Sandbox Code Playgroud)

在这种情况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;
Run Code Online (Sandbox Code Playgroud)

当我启动应用程序时,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; …
Run Code Online (Sandbox Code Playgroud)

delphi performance android firemonkey android-timer

3
推荐指数
1
解决办法
432
查看次数