我正在创建一个允许通过高频声波进行非常低带宽通信的应用程序。我已经到了可以创建频率并进行傅立叶变换的地步(借助于Moonblink的Audalyzer开源代码)。

但是,这是我的问题:我无法使代码按正确的时间运行。假设我希望每10毫秒执行一段代码,我该怎么做呢?

我已经尝试过使用TimerTask,但是在代码实际执行之前会有很大的延迟,例如最长100ms。

我也通过仅查询当前时间并仅在经过该时间后才执行来尝试此方法。但是仍然存在延迟问题。你们有什么主意吗?

Thread analysis = new Thread(new Runnable()
{
    @Override
    public void run()
    {
        android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_URGENT_DISPLAY);

        long executeTime = System.currentTimeMillis();

        manualAnalyzer.measureStart();
        while (FFTransforming)
        {
            if(System.currentTimeMillis() >= executeTime)
            {
                //Reset the timer to execute again in 10ms
                executeTime+=10;

                //Perform Fourier Transform
                manualAnalyzer.doUpdate(0);

                //TODO: Analyze the results of the transform here...

            }
        }
        manualAnalyzer.measureStop();
    }
});
analysis.start();

最佳答案

您的线程/循环策略可能与您将要达到的目标差不多。但是,10ms并不是很多时间,大多数Android设备都不是 super 强大的功能,傅立叶变换是很多工作要做。我发现您不可能在10毫秒内完成那么多工作。我怀疑您将不得不延长该期限。

07-26 09:30