0

私のAndroidプログラムでは、2つのCalendarインスタンスを使用してプログラムの経過時間を取得しています。最初に、レベルの開始時間を次のように設定します。

level_Start_TimeCal = Calendar.getInstance();   

私のスレッドでは、経過時間を次のように計算しています。

level_current_TimeCal = Calendar.getInstance();
gameTime = level_current_TimeCal.getTimeInMillis()- level_Start_TimeCal.getTimeInMillis();                      
dsecs = (gameTime / 1000)%60;
dminutes = (gameTime / (60 * 1000))%60;
dhours = (gameTime / (60 * 60 * 1000))%60;

最近、私は以下を読むようになりました:

CalendarのgetInstanceメソッドは、カレンダーフィールドが現在の日付と時刻で初期化されているCalendarオブジェクトを返します。

私が正しい道を進んでいるかどうか知りたいですか?
スレッドが実行されるたびにオブジェクトを作成していますか?
はいの場合、不要なオブジェクトの作成と経過時間の計算を回避するための代替手段はありますか?最後の質問:ある時点で、restartメソッドで時間をリセットしたいのですが、次のように、resetメソッドでgetInstanceを呼び出すだけで時間をリセットします。

public void restart() {
 level_Start_TimeCal = Calendar.getInstance();
}

これはカレンダーをリセットする正しい方法ですか?

4

1 に答える 1

2

経過時間を計算する最良の方法は、を使用することSystem.nanotime()です。

long start = System.nanoTime();
//do something
long end = System.nanoTime();

//to get the elapsed time, you can use the TimeUnit utility methods:
long elapsedInNanos = end - start;
long elapsedInSeconds = TimeUnit.SECONDS.convert(elapsedInNanos, TimeUnit.NANOSECONDS);

絶対時間にアクセスするのは便利な方法ではないことに注意してください。

于 2013-01-01T08:51:44.597 に答える