0

カウントダウンタイマーを作成しましたが、ブール値が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();
        }
    };
4

5 に答える 5

2

ゲームでタイマーを使用したいとおっしゃいましたが、しばらくしてからゲームオーバーをしたいのでAlarmmanager. 、ゲームを開始するときに、アラームマネージャーを使用してサービスの保留中のインテントを設定するのが最善の方法です。マネージャーはサービスを開始するので、そのサービスからゲーム オーバーのプレイ アクティビティにブロードキャストを送信します。

また、再開機能と一時停止機能を処理する場合は、ユーザーが一時停止ボタンをクリックしたときに保留中のインテントをキャンセルし、期間を設定ファイルに保存します。ユーザーが再開ボタンをクリックすると、設定から時間が取得され、残り時間が計算され、アラームマネージャーを使用してサービスの保留中の意図が設定されます。

アクティビティが終了したり、再作成したりする心配はありません。

于 2012-03-02T13:04:51.763 に答える
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 に答える
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 に答える
0

アクティビティが再び表示されないように言及していることにより、1 つのアプローチは、インテントを呼び出す直前に finish() を呼び出すことです。これにより、アクティビティは Android スタックに保存されません。ゲームを終了したい場合は、その時点で FLAG KEEP NO HISTORY を呼び出します。これにより、スタックの一番下に並んでいるすべてのアクティビティが閉じられます。

于 2012-03-02T12:44:59.610 に答える