Android上的实时计时器任务

时间:2017-09-25 12:26:39

标签: android audio timer

可以在Android下创建一个实时(计时器)任务吗? 我需要一个高性能的计时器,每 20毫秒运行(无暂停)。

我的用例:创建一个音频处理程序,将每20毫秒一个音频数据包放入音频缓冲区。音频数据将在UDP套接字中接收。

我使用并测试了不同的计时器实现。 例如:ScheduledExecutorService,Timer / TimerTask,Handler,pure Loop(带Thread.Sleep),CountDownTimer。 这个解决方案对我来说效果不好:(

使用ScheduledExecutorService和Timer / TimerTask实现虚拟实现(非常简单,请参阅此代码):

Executors.newSingleThreadScheduledExecutor().scheduleWithFixedDelay(new Runnable()
{
     @Override
     public void run()
     {
            // TODO here is my timer code
     }
}, 0, 20, TimeUnit.MILLISECONDS);

new Timer().schedule(new TimerTask()
{
     @Override
     public void run()
     {
           // TODO own Code here
     }
}, 0, 20);

我的问题是:

Number1:没有实时保证,我的计时器有时会暂停100-200毫秒(恕我直言,垃圾收集或其他操作系统服务...)

Number2:如果我的计时器处于前台,它运行良好(问题#1除外),但如果我的应用程序处于后台,则计时器间隔将增加到60毫秒(不是20毫秒)

我在不同的Android版本(5.x,6.x,7.x)上测试了它,在Marshmallow上它有时可以工作(也许它取决于供应商驱动程序?) 一些想法?或者这在Android下是不可能的?

0 个答案:

没有答案