Libgdx定时器暂停';什么是失去焦点?

Libgdx定时器暂停';什么是失去焦点?,libgdx,Libgdx,我注意到,如果我在一个默认的、新创建的LibGDX项目上使用GDXs Timer类,那么当应用程序最小化或不在焦点时,它将根本不会启动。 至少在桌面部署Windows 10上是这样 同时,JAVAs自己的计时器类不考虑焦点而触发。 一个简单的示例应用程序来演示差异 @Override public void create () { //gdx timer (does not update when focus lost); //------------------ co

我注意到,如果我在一个默认的、新创建的LibGDX项目上使用GDXs Timer类,那么当应用程序最小化或不在焦点时,它将根本不会启动。 至少在桌面部署Windows 10上是这样

同时,JAVAs自己的计时器类不考虑焦点而触发。 一个简单的示例应用程序来演示差异

@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);
}
运行这个程序,您可以清楚地看到,当处于焦点时,日志会触发,而当不处于焦点时,只有Java会触发

我的问题是

a) LibGDXs计时器的行为是预期的,还是我在设置中做了一些错误的事情?LibGDXs计时器的描述似乎没有提到自动暂停

b) 我希望我的应用程序在后台运行,除非显式暂停。比如说,仅仅使用alt+Tab键是不够的。 我应该改用JAVAs定时器吗?这是否有跨平台的影响

谢谢, 是的,处理计时器的TimerThread的文档中说:

管理单个计时器线程。停止libgdx应用程序上的线程 暂停并处理,在恢复时启动线程


b) 由于libGDX定时器仅仅是一个线程,它监听应用程序更改(暂停、恢复等)和任务列表,所以使用Java的定时器应该没问题。因为它来自1.3(libGDX目标是1.6),所以它不应该有任何跨平台的含义。

没有跨平台的含义,而是一大堆“在当前线程中找不到OpenGL上下文”。我猜LibGDXs定时器是在渲染线程中运行的,我以前不需要担心这个问题:-/无论如何,谢谢你的帮助。实际上,Javas定时器在Gwt部署中不起作用。我早该意识到这一点。