2012-03-02 9 views
0

私はcountdowntimerを作成しました。ブール値が真の場合は今すぐ起動します。それを行う方法はありますか?あなたは、1つのアプローチは、あなたが意図を呼び出す直前に仕上げ()を呼び出すことになる活動が再び表示されないことを言及しているものでは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

は、私は次のcountdowntimerと、次のクラスを作成しました。これで、活動はアンドロイドのスタックに保存されません。ゲームを終了したい場合は、その時間はFLAG KEEP NO HISTORYを呼び出します。これにより、スタックの最上部の下に並んでいるすべてのアクティビティが閉じられます。あなたがゲームの設定を開始すると

+0

こんにちは、アクティビティが表示されますもう一度、startActivity('intent ')を使用して毎回再作成されます。これは、タイマーが再び開始されることを意味し、無制限のゲーム時間です。私はより多くのアクティビティを「ビハインド」しているので、finish()を使用する代わりにそのアクティビティを直接呼び出すことをお勧めします。 – Diego

+0

これは、あなたのonCreateが再び呼び出されていることを意味します。 1つのアプローチはブール値とチェックを設定することです。 if(true)timer running else if(false)timerを開始します。 –

+0

こんにちはRashmi、しかし、タイマーが実行されているかどうかを確認する方法はありますか? – Diego

1

あなたがあなたのゲームでタイマーを使用すると、いくつかの時間後にあなたがそう最善の方法を介してゲームをやってみたいことを述べたように、マニフェスト

+0

私はまだ複数のタイマーを取得していますが、私は意図にいくつかのフラグを追加する必要があると思いますので、古いものの横に新しいものを作成するのではなく、一時停止したアクティビティを呼び出します。 – Diego

2

android:launchMode="singleInstance"を試してみてはAlarmmanager. ですアラームマネージャを使用して保留中のインテントを送信します。時間が経過すると、アラームマネージャはそのサービスからサービスを開始し、ブロードキャストをゲームオーバーの再生アクティビティに送信します。

また、レジュームと一時停止の機能を処理する場合、一時停止ボタンをクリックすると、保留中のインテントをキャンセルし、設定ファイルに期間を保存するだけです。 ユーザがレジュームボタンをクリックすると、プリファレンスから時間をフェッチし、残りの時間を計算し、アラームマネージャを使用して保留中のインテントを設定します。

完了するか再作成することについて心配する必要はありません。

+0

残りの分を常に表示する可能性もありますか? – Diego

+0

はい、サービスやスレッドを開始して残りの分を表示し、それに従ってUIを更新することができます。 – Dharmendra

+0

ゲームを開始したりゲームを再開したりすると、追加のサービスやスレッドが開始され、残りの分が計算され、ブロードキャストレシーバを使用してUIが更新されるか、単にハンドラを使用して更新されます。 – Dharmendra

1

単一のタイマーが必要な場合は、カスタムタイマーオブジェクトのシングルトンインスタンスを作成することをお勧めします。時間を使用するアクティビティを呼び出す場合は、アクティビティを起動して、タイマーオブジェクトをビューに適用するだけです。これは、アプリケーションのどこでも同じ時間を参照できるということです(ステータスバーやポーズメニューなど)。

Bill Pugh @http://en.wikipedia.org/wiki/Singleton_patternのソリューションは、以下のような優れたシングルトンデザインパターンです。 JuanMaクエバスが言ったことをするのではなく、マニフェストの使用のAndroidでゲームアクティビティ・ノードで同様の

+0

保存するには、プライベートメソッドを実装してタイマーを開始し、このプライベートメソッドをプライベートコンストラクターから呼び出す必要があります。これにより、クラスを使用する他の開発者がタイマーを再起動するのを防ぎ、デバイスが初めて使用されたときにタイマーが起動されることを保証します。つまり、myTime.getInstance()が呼び出されます。 – jjNford

1

:起動モード=「singleTask」

これ何が必要ではなく、singleInstance ...

+0

私はまだ多重多重を取得しますが、間に黒い画面を表示しません。タイマーが起動しているかどうかを確認することができれば、起動と一時停止を制御できます – Diego

関連する問題