当前位置: 首页 > 知识库问答 >
问题:

Android计时器计划与scheduleAtFixedRate

富建章
2023-03-14

我正在编写一个Android应用程序,每10分钟录制一次音频。我用定时器来做这件事。但是scheduleAtFixedRate和scheduleAtFixedRate之间有什么区别呢?使用其中一种方法是否有性能优势?

共有3个答案

苍德寿
2023-03-14

根据java。util。计时器。TimerImpl。TimerHeap代码

// this is a repeating task,
if (task.fixedRate) {
    // task is scheduled at fixed rate
    task.when = task.when + task.period;
} else {
    // task is scheduled at fixed delay
    task.when = System.currentTimeMillis() + task.period;
}

--

java.util.Timer.schedule(TimerTask task, long delay, long period)

将设置任务。fixedRate=false

java.util.Timer.scheduleAtFixedRate(TimerTask task, long delay, long period)

将设置任务。fixedRate=真

顺便说一句,当屏幕关闭时,计时器不工作。您应该使用AlarmManager。

有以下示例:http://developer.android.com/training/scheduling/alarms.html

顾池暝
2023-03-14

一个简单的schedule()

通过查看语法:

Timer timer = new Timer(); 
timer.schedule( new performClass(), 30000 );

这将在30秒时间间隔结束后执行一次。一种时态动作。

Timer timer = new Timer(); 
//timer.schedule(task, delay, period)
//timer.schedule( new performClass(), 1000, 30000 );
// or you can write in another way
//timer.scheduleAtFixedRate(task, delay, period);
timer.scheduleAtFixedRate( new performClass(), 1000, 30000 );

这将在1秒后开始,每隔30秒重复一次。

向杜吟
2023-03-14

非Android文档可以很好地解释这种差异:

固定速率定时器(schduleAtFixed速率())基于起始时间(因此每个迭代将在starTime迭代号*delayTime处执行)。

在固定速率执行中,每个执行相对于初始执行的预定执行时间进行调度。如果执行因任何原因(如垃圾回收机制或其他后台活动)而延迟,将快速连续发生两次或更多次执行以“赶上”

固定延迟定时器(调度())基于先前的执行(因此每个迭代将在lastExecttionTime delayTime执行)。

在固定延迟执行中,每次执行都是相对于前一次执行的实际执行时间进行调度的。如果执行因任何原因(如垃圾收集或其他后台活动)而延迟,则后续执行也将延迟。

除此之外,没有区别。您也不会发现显著的性能差异。

如果在希望与其他内容保持同步的情况下使用此选项,则需要使用scheduleAtFixedRate()schedule()的延迟可能会漂移并引入错误。

 类似资料:
  • 我对方法的期望(根据我在中给出的理解,其中每次执行都是在前一个任务执行完成后安排的)应该在第1行之后创建两个线程。 一个用于计时器,它为任务生成另一个线程。一旦第一个任务线程死亡,将创建另一个任务线程并继续执行。但在调试点,我只看到一个线程对应于计时器。为什么不为实现可运行的任务执行线程? 我对scheduleAtFixedRate()方法的期望(根据我在javadocs中给出的理解,其中每个执行

  • 关于Java定时器类或ScheduledExecutorService接口,我可以在执行器线程(其他调度器)的运行方法(或TimerTask)内设置调度器(或定时器)吗? 案例研究:我有一个数据库,其中包含歌曲列表(10000首)和播放歌曲的时间表。 所以我想创建一个调度程序(比如1)(周期为1小时),它将搜索数据库,并为计划在一小时内播放的所有歌曲创建调度程序。 一小时后,scheduler1将

  • 问题内容: 我已经阅读了几次此页面,只是没有看到GWT 和类之间的某些固有差异。我正在寻找以下各项的用例和适用性: ,和 这些似乎或多或少都在做着相同的事情,感觉您可以使用所有这些东西实现相同的目标。这仅仅是GWT的一种方式,提供了多种完成同一件事的方式吗?如果没有,请帮助我了解何时何地适当使用它们。 问题答案: 如果需要浏览器完成当前正在执行的操作,然后再告诉它执行其他操作,请使用 Schedu

  • 问题内容: 我已将一个WAR文件部署到Tomcat服务器,该类之一将在启动时调用,然后init()方法将安排一个计时器,每5小时触发一次以执行一些任务。 我的init()代码如下所示: 我的应用程序运行没有问题,但是当我使用 /etc/init.d/tomcat7 stop 关闭Tomcat时,我检查了日志(catalina.out),它具有以下条目: 严重:Web应用程序[/ MyApplica

  • 我正在建立一个Android应用程序,必须定期做一些服务。我发现使用< code > ScheduledThreadPoolExecutor 和< code > ScheduledExecutorService 比< code>Timer更好。 有人能解释一下和的区别吗?哪款更适合Android? 更新 我刚刚发现这篇文章和这篇文章解释了实现重复周期性任务的几种方法之间的区别。在我的情况下,和更合

  • 本文向大家介绍JavaScript setInterval()与setTimeout()计时器,包括了JavaScript setInterval()与setTimeout()计时器的使用技巧和注意事项,需要的朋友参考一下   JavaScript是单线程语言,但是它可以通过设置超时值和间歇时间值来指定代码在特定的时刻执行。超时值是指在指定时间之后执行代码,间歇时间值是指每隔指定的时间就执行一次代