我正在开发一个包含计时器的libGDX应用程序。即使按下主页按钮,我也需要定时器运行,即使按下开关按钮关闭屏幕也是如此。
为此,我考虑阻止应用程序进入暂停状态。 在AndroidLauncher.java中,我添加了以下代码行:
@Override
public void onPause() {
onResume();
}
这个想法是在应用程序进入暂停状态后立即恢复该应用程序。
按下主页按钮并返回应用程序后,这是应用程序的logcat:
01-26 18:17:25.125:I / AndroidInput(2753):传感器监听器设置
01-26 18:17:25.126:I / AndroidGraphics(2753):已恢复
01-26 18:17:25.191:W / IInputConnectionWrapper(2753):showStatusIcon on inactive InputConnection
01-26 18:17:28.899:I / AndroidInput(2753):sensor
01-26 18:17:28.919:I / AndroidGraphics(2753):已恢复
正如您所看到的,当应用程序运行时,如果我按下主页按钮,应用程序将恢复,而不会进入暂停状态,当我返回应用程序时,它会再次恢复。但是,计时器停止了......
为什么计时器在应用程序永远不会处于暂停状态时停止? 最后,如何在按下主页按钮后保持定时器运行?
由于
修改: 所以我开始使用这些服务,我仍然遇到问题,让计时器在后台运行。
以下是佼佼者:
代码:
GameScreen.java中的计时器:
timer = new Timer();
timer.scheduleTask(new Task(){
public void run() {
timerSeconds--;
}
}, 1,1);
接口ActionResolver.java:
public interface ActionResolver {
public void backgroundTimer(int a);
}
在主要活动MyGdxGame.java中调用ActionResolver:
@Override
public void pause() {
super.pause();
actionResolver.backgroundTimer(GameScreen.timerSeconds);
}
在AndroidLauncher中定义了backgroundTimer方法:
@Override
public void backgroundTimer(int a) {
aa = a;
Intent intentTimer = new Intent(AndroidLauncher.this, IntentServiceTimer.class);
intentTimer.putExtra(TIMER, aa);
startService(intentTimer);
}
然后我创建了intentServiceTimer类:
public class IntentServiceTimer extends IntentService{
private final static String TAG = "IntentServiceExample";
int a;
public IntentServiceTimer(){
super(TAG);
}
@Override
protected void onHandleIntent(final Intent intent) {
Log.d(TAG, "When the game went on pause, the number of remaining seconds was : " + intent.getIntExtra(AndroidLauncher.TIMER, -1));
a = intent.getIntExtra(AndroidLauncher.TIMER, -1);
Timer timer = new Timer();
timer.scheduleTask(new Task(){
public void run() {
a--;
Log.d(TAG, "Seconds remaining : " + a);
}
}, 1,1);
}
}
在AndroidManifest.xml中我声明了服务:
<service android:name="IntentServiceTimer"/>
结果:
当我在应用程序中午餐时,一旦游戏进入暂停状态,此服务线就会打印出正确的消息,这很好:
Log.d(TAG, "When the game went on pause, the number of remaining seconds was : " + intent.getIntExtra(AndroidLauncher.TIMER, -1));
但是,定时器循环,包括倒计时和每秒倒计时打印,似乎不起作用,因为控制台中没有打印。但是,如果我回到应用程序,计数会在一次打印游戏处于暂停状态的每一秒。例如,如果我将游戏置于暂停状态5秒钟,那么一旦我回到应用程序,它就会打印出来:
剩下的秒数:27
剩下的秒数:26
剩余秒数:25
剩下的秒数:24
剩下的秒数:23
所以我有这种奇怪的服务行为:
你对这个问题有什么看法吗? 我仍然没有检查警报管理员,因为我需要在后台运行更复杂的过程,将来,服务似乎是我需要的。
答案 0 :(得分:3)
您应该使用服务来解决此问题:Services
按下三个软键中的一些时调用的其他方法是onUserLeaveHint,但它无法解决您的问题,以便您将来可以使用它确定:
protected void onUserLeaveHint() {
super.onUserLeaveHint();
}
答案 1 :(得分:1)
在我最初的问题的编辑中,我开始使用服务,但我有一个非常奇怪的服务行为。我的问题来自于我在IntentService类中使用了libgdx包中的Timer()和Task()方法。
我刚用java.util包中的等效Timer()和TimerTask()方法替换了这两个类,并且eveything工作顺利!
现在,我的IntentServiceTimer看起来像这样:
import java.util.Timer;
import java.util.TimerTask;
import android.app.IntentService;
import android.content.Intent;
import android.util.Log;
public class IntentServiceTimer extends IntentService{
private final static String TAG = "IntentServiceExample";
int a;
public IntentServiceTimer(){
super(TAG);
}
@Override
protected void onHandleIntent(final Intent intent) {
Log.d(TAG, "When the game went on pause, the number of remaining seconds was : " + intent.getIntExtra(AndroidLauncher.TIMER, -1));
a = intent.getIntExtra(AndroidLauncher.TIMER, -1);
Timer timer = new Timer();
timer.schedule(new TimerTask(){
public void run() {
a--;
Log.d(TAG, "Seconds remaining : " + a);
}
}, 1,1);
}
}