0

我创建了一个倒数计时器,如果布尔值为真,它现在开始,如果我检测到计时器是否正在运行,那会更好。有没有办法做到这一点?

我使用以下倒数计时器创建了以下类:

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();
        }
    };
4

5 回答 5

2

正如您所提到的,您想在游戏中使用计时器,并且在一段时间后您想要结束游戏,所以最好的方法是Alarmmanager. 当您开始游戏时使用警报管理器设置待处理的服务意图。所以在时间到期警报之后manager 将启动该服务,以便从该服务将广播发送到游戏结束的播放活动。

而且,如果您想处理恢复和暂停功能,当用户单击暂停按钮时,只需取消挂起的意图并将持续时间保存在首选项文件中。当用户单击恢复按钮时,只需从首选项中获取时间并计算剩余时间并使用警报管理器设置服务的待处理意图。

您不必担心要完成或重新创建的活动。

于 2012-03-02T13:04:51.763 回答
1

Similar to what JuanMa Cuevas said but in the game activity node in the manifest use android:launch mode="singleTask"

This what you need, not singleInstance..

于 2012-03-02T14:53:51.570 回答
1

android:launchMode="singleInstance"在清单中尝试

于 2012-03-02T12:55:03.510 回答
1

如果您想要一个计时器,我认为一个好主意是创建自定义计时器对象的单例实例。每次您想调用使用时间的活动时,您只需启动活动并将计时器对象应用于视图。这样做的好处是您可以在应用程序的任何位置(即状态栏或暂停菜单)引用相同的时间。

Bill Pugh @ http://en.wikipedia.org/wiki/Singleton_pattern的解决方案是一个很好的单例设计模式。

于 2012-03-02T14:31:38.430 回答
0

通过您提到的活动不应再次出现,一种方法是在您调用意图之前调用 finish() 。这样,活动将不会保存在 android 堆栈中。如果你想结束游戏,到时候打电话给FLAG KEEP NO HISTORY。这将关闭所有排列在堆栈顶部下方的活动。

于 2012-03-02T12:44:59.610 回答