我在应用程序中实现足够的实时性能时遇到了一些麻烦,并且想知道我是否已经将其设置为次优。要求应用程序播放声音并在用户指定的时间间隔内在Canvas
上绘制一条线。
我有Thread
在用户指定的时间间隔内休眠,醒来并使用Handler
和Runnable
进行必要的绘图和声音播放。当我运行应用程序时,节拍有时是稳定的,但有时,您可以从AudioFlinger
看到GC和随机警告条件的影响。
通过Handler / Runnable将Timer
线程回发到GUI线程是最好的方法吗?我可以做些什么来提高我的应用程序的优先级,同时它是可见的,以便其他应用程序和Android活动不太可能打断它?我是否需要使用NDK来访问Java API中不存在的实时功能?
答案 0 :(得分:3)
听起来你想要的是游戏循环。有许多关于创建游戏循环的教程,其中包含更加一致的时序,例如simple java android game loop.您可以尝试根据该术语进行搜索,看看是否有帮助。
答案 1 :(得分:1)
此外,当尝试创建实时应用程序时(如在不断动态的应用程序而不是scientific real time system中),您可能希望避免让垃圾收集器运行。这需要一些时间,可以被视为滞后。因此,不要创建需要立即处理的对象等。