可以在Android下创建一个实时(计时器)任务吗?
我需要一个高性能的计时器,每
我的用例:创建一个音频处理程序,将每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下是不可能的?