我注意到如果我在默认的,新创建的LibGDX项目中使用GDXs Timer类,它将在应用程序最小化或无法聚焦时根本不会触发。 至少在桌面部署Windows 10上也是如此。
JAVA自己的计时器类,同时,无论焦点如何都会触发。 一个简单的示例应用程序来演示差异;
@Override
public void create () {
//gdx timer (does not update when focus lost);
//------------------
com.badlogic.gdx.utils.Timer.schedule(new com.badlogic.gdx.utils.Timer.Task(){
@Override
public void run() {
long currentTime = System.currentTimeMillis();
Log.info("____GDX_____________________:"+currentTime+"_________");
}
}
, 0
, 1.0f );
//java timer (updates when focus lost);
//-----------------
Timer test = new Timer();
test.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
long currentTime = System.currentTimeMillis();
Log.info("___JAVA____________________:"+currentTime+"_________");
}
}, 0, 1000);
}
运行它可以清楚地看到两个日志在焦点时都会触发,而只有焦点处于焦点状态时才会触发。
我的问题是
a)是否期望LibGDXs计时器的行为,或者我在设置中做错了什么? LibGDXs计时器的描述似乎没有提到自动暂停。
b)我希望我的应用程序在后台运行,除非明确暂停。仅仅说,alt + tabbing应该不够。 我应该切换到使用JAVA计时器吗?这是否具有跨平台的影响?
谢谢, Darkflame
答案 0 :(得分:2)
a)是的,处理Timer的TimerThread文档说:
管理单个计时器线程。在libgdx应用程序上停止线程 暂停和处理,在恢复时启动线程。
b)由于libGDX Timer没有什么特别的东西,只有一个Thread,它监听应用程序的更改(暂停,恢复等),任务列表,使用Java的定时器应该没问题。由于它来自1.3(并且libGDX目标是1.6),因此它不应该具有任何跨平台的含义。