我创建了一个倒数计时器,如果布尔值为true,它会立即启动,如果我检测到计时器是否正在运行会更好。有没有办法做到这一点?
我使用以下countdowntimer创建了以下类:
public class GameActivity
{
int GameTime = 120;
long GameTimeLeft = GameTime;
long GameMillis;
/** Called when the activity is first created. */
@Override
public void onCreate( Bundle savedInstanceState )
{
super.onCreate( savedInstanceState );
setContentView( R.layout.gamemap );
myupdater = new Handler();
GameMemory = new PreferenceHandler(this);
GameTimeLeft = GameMemory.getMinutesLeft();
GameMillis = ( GameTimeLeft * 60000 );
if ( GameMemory.getTimerSetting() )
{
Log.d( "StartTimer", "Minutes Set " + ( GameMillis / 60000 ) );
GameTimeLeftCounter.start();
GameMemory.setTimerSetting( false );
}
}
CountDownTimer GameTimeLeftCounter = new CountDownTimer( GameMillis, 60000 )
{
public void onTick( long millisUntilFinished )
{
GameTimeLeft = millisUntilFinished / 1000 / 60;
Log.d( "GameTimeLeftCounter", "Time Left: " + GameTimeLeft );
GameMemory.setMinutesLeft( GameTimeLeft );
}
public void onFinish()
{
//GAME OVER TIMER FINISHED
Intent gameover = new Intent( BarcelonaTriviaGame.this, GameOver.class );
gameover.setFlags( Intent.FLAG_ACTIVITY_NO_ANIMATION );
Log.d( "TimerFinished", "Finished" );
startActivity( gameover );
finish();
}
};
答案 0 :(得分:2)
如你所说,你想在你的游戏中使用计时器,经过一段时间你想要以最佳方式进行游戏,Alarmmanager.
当您启动游戏时,使用警报管理器设置待处理的服务意图。在时间到期后,警报管理器将启动服务,以便从该服务将广播发送到游戏结束的游戏活动。
此外,如果您想要处理恢复和暂停功能,当用户单击暂停按钮时,只需取消待处理的意图并将持续时间保存在首选项文件中。 当用户点击恢复按钮时,只需从首选项中获取时间并计算剩余时间并使用警报管理器设置服务的待定意图。
您不必担心要完成或重新创建的活动。
答案 1 :(得分:1)
在清单中尝试android:launchMode="singleInstance"
答案 2 :(得分:1)
如果你想要一个单一的计时器,我认为一个好主意是创建一个自定义计时器对象的单例实例。每次要调用使用时间的活动时,只需启动活动并将计时器对象应用于视图。关于这一点的好处是你可以在应用程序的任何地方(即状态栏或暂停菜单)同时引用。
Bill Pugh @ http://en.wikipedia.org/wiki/Singleton_pattern的解决方案是一个很好的单身设计模式。
答案 3 :(得分:1)
类似于JuanMa Cuevas所说的但是在清单中的游戏活动节点中使用android:launch mode =“singleTask”
这是你需要的,而不是singleInstance ..
答案 4 :(得分:0)
通过你提到的活动不应该再出现,一种方法就是在调用intent之前调用finish()。有了这个,活动将不会保存在Android堆栈中。如果你想结束游戏,那个时候请拨打FLAG KEEP NO HISTORY。这将关闭排在堆栈顶部下方的所有活动。