- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想做与下面这段代码相同的操作,但使用 System.nanoTime()
反而
new Timer().schedule(new TimerTask()
{
public void run()
{
bt.send("Start");
try {
Thread.currentThread().setPriority(1);
Thread.sleep(50, 0);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
s.playSound();
} }
, 0, 3000);
send()
和
playSound()
一个接一个 (运行 send() 后 50 毫秒),在
中定期间隔 3 秒。
nanoTime()
的原因是计时器不准确,从android设备播放音频也有一些延迟,我在寻求准确性和及时性。我也尝试在单独的线程中执行此操作,但仍然有很多延迟。
long t1=System.nanoTime();
long t = t1;
while(true)
{
long t2 = System.nanoTime();
if(t2>=t1+3 seconds)
bt.send("Start");
t1=t2;
t3=System.nanoTime();
if(t3>=t+3500 milliseconds)
playsound();
t=System.nanoTime();
}
最佳答案
我不知道你从哪里得到使用的想法 while(true)
但这永远不会奏效。通常,这整个代码块永远不会工作。
您的原始代码有正确的想法,使用 Timer
.但您也可以使用 Handler
如果你想。但我必须告诉你:精确地计时几乎是不可能的,你必须小心 nanoTime()
.普通智能手机上没有任何系统可以测量几纳秒的时间跨度。即使是毫秒也可能不准确。
无论如何 1 纳秒 = 0.000000001 秒。我 高度 怀疑您是否需要如此精确的时间。只需使用 nanoTime()
不会增加测量的任何准确性,只会增加不准确性的可能性。
我的观点是:原始代码几乎是正确的,我严重怀疑 Timer
那是不准确的。很可能您只是认为它不准确,因为其他一些不相关的编程错误。
我稍微修改了您的代码以测试其准确性,这是我使用的代码:
new Timer().schedule(new TimerTask() {
public void run() {
long start = System.currentTimeMillis();
try {
Thread.sleep(50, 0);
} catch (InterruptedException e) {
e.printStackTrace();
}
long end = System.currentTimeMillis();
final long pause = end - start;
final long interval = start - lastStartup;
lastStartup = start;
Log.i("Timing Tests", interval + " / " + pause);
}
}, 3000, 3000);
Timing Tests﹕ 3000 / 50
Timing Tests﹕ 3000 / 51
Timing Tests﹕ 3000 / 50
Timing Tests﹕ 3000 / 50
Timing Tests﹕ 3000 / 50
Timing Tests﹕ 3000 / 50
Timing Tests﹕ 3000 / 51
Timing Tests﹕ 3000 / 50
Timing Tests﹕ 3000 / 50
Timing Tests﹕ 3000 / 50
Timing Tests﹕ 3000 / 50
Timing Tests﹕ 3001 / 50
Timing Tests﹕ 3000 / 50
Timing Tests﹕ 3001 / 50
Timing Tests﹕ 3000 / 50
Timing Tests﹕ 3000 / 51
Timing Tests﹕ 3000 / 50
Timing Tests﹕ 3000 / 50
Timing Tests﹕ 3000 / 50
Timing Tests﹕ 3001 / 50
Timing Tests﹕ 3000 / 50
Timing Tests﹕ 3000 / 50
Timing Tests﹕ 3001 / 50
Timing Tests﹕ 3000 / 50
Timing Tests﹕ 3000 / 50
Timer
精确到 +-1ms。这将尽可能准确,不仅在 Android 上,而且在任何操作系统上。这是如此准确,以至于没有用户能注意到这个微小的差异。
Timer
无关。或
TimerTask
.
关于android - 用 nanoTime() 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25183807/
大家好,我有一段代码如下所示: public class Test { public static void main(String args[]) { long a = Sy
我做了这样的基准: for (int i = 0; i < 1000 * 1000; ++i) { long var = System.nanoTime(); } 在我的jdk6.0电脑上需要
我正在做一个项目,需要在 999 个随机 double 组中实现冒泡排序、希尔排序和快速排序算法。 我需要测量每个算法运行所需的时间。 我正在使用 System.nanoTime() 来测量每个算法的
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我有一个线程将数据插入队列,另一个线程从队列中读取数据并进行处理。我想检查数据在处理之前在队列中的停留时间。 我在第一个线程推送之前在数据中添加了一个时间参数(使用 System.nanoTime()
可以使用 Clock 模拟调用,例如 System.currentTimeMillis() 使用 Clock.millis() 并注入(inject) Clock 的模拟实现。 是否有类似的方法可以轻
我想以纳秒为单位计算两个事件之间耗时。为此,我可以使用 System.nanoTime()如前所述 here .问题是这两个事件发生在不同的线程中。 自 nanoTime()不返回绝对时间戳,而只能用
我想做与下面这段代码相同的操作,但使用 System.nanoTime()反而 new Timer().schedule(new TimerTask() {
我正在编写一个 FTP 客户端应用程序,并在代码中的两个点使用了 System.nanoTime(),返回的秒数差异为 18,而我的程序只需要 2 秒...检查 onPostExecute 方法中的日
我目前正在使用 Java 编写多线程程序。在某些时候,不同的线程会记录它们的操作,我正在使用 nanoTime为了这。每个线程都有自己的日志文件,最后我将它们合并并根据时间 (nanoTime) 对它
我在我的应用程序中使用 system.nanoTime 并计算相对于开始时间的时间。 我的应用程序运行得很好,直到我将其复制到一台新计算机上,在它上纳米时间给了我较慢的值。 我编写了一个简单的应用程序
这不是我第一次遇到编程语言中的时钟时间问题。基本上,我通过在 while 循环中调用函数来测量函数的运行速度。问题是,由于某种原因,while 循环运行的时间越长,耗时就越短。谁能解释一下吗?代码如下
我使用以下代码来评估我的方法/操作的性能- 问题:由于这是贯穿代码的,是否应将其从生产代码中删除以防止降低应用性能。 在我们的一次讨论中,有人指出 Linux(时区)上的一些时间调用会执行 IO 以查
在 gemfire 上,我有一个区域 ABC,并且在该区域内有一个 long 类型的列/字段。在此字段中,我将值设置为 System.nanoTime()。我想获取该区域 24 小时前的所有记录。我怎
我正在编写一个使用 System.nanotime 的 android 计时器应用程序。问题是它给了我低估的结果和负数。 redVal、blueVal 和 greenVal 在相机的每一帧上更新。 结
我正在开发一个 2d java 游戏,但我遇到了计时器问题。这是我的游戏循环: void gameLoop(isRunning){ .... doStuff(); .... } 我在循环中有一个像这样
我正在关注这个jmh 测试http://hg.openjdk.java.net/code-tools/jmh/file/57623b7f64e6/jmh-core-benchmarks/src/mai
我有一个很长的字符串,其模式为 最后,我试图测试一些函数调用的性能,所以我进行了以下测试以试图找出答案......但我认为我可能错误地使用了 nanoTime?因为无论我如何交换顺序,结果都没有意义.
我使用变量 time_of_last_call 作为我的时间起点;因为 nanoTime() 可能会给出负值,所以我不能使用 0 作为我的时间起点来初始化 time_of_last_call。如果我用
我有一个多线程 Java 程序,可以在几秒钟内创建数百个临时文件。这些文件位于 /tmp 中,并使用 System.nanoTime() 命名。 是否保证文件名是唯一的? 最佳答案 不,不能保证每次调
我是一名优秀的程序员,十分优秀!