我有一个游戏活动,我想测量用户玩的时间。
在游戏活动中,我有两个长变量,
static long stopTime = 0;
static long startTime = -99;
我试图将onResume()
中的开始时间设置为onPause()
中的结束时间,如下所示:
的onPause:
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
stopTime = SystemClock.currentThreadTimeMillis();
Log.d("OnPause","stopTime: "+stopTime);
}
的onResume:
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
if (startTime == -99)
{
startTime = SystemClock.currentThreadTimeMillis();
Log.d("OnPause","THIS IS RESUME : startTime: "+startTime);
}
}
当我首先发起startTime
时,我给它一个-99的值,所以只有当它是onResume
中的值时,我才会将它的值更新为currentmillis。
然后传递stopTime - startTime
长的长号
putExtra("totalTime", this.stopTime - this.startTime);
到另一个获取此值并将其呈现给用户的活动。我这样做,使用一个名为moveToEndScreen()的方法,在游戏结束时调用:
private void moveToEndScreen() {
// TODO Auto-generated method stub
Intent i = new Intent(con, EndScreen.class);
i.putExtra("err", errTimes);
i.putExtra("timeScore", stopTime - startTime);
startActivity(i);
}
这就是下一个活动的结果:
public class EndScreen extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
Intent i = getIntent();
long timeScore = i.getLongExtra("timeScore",15);
Log.d("END SCREEN timeScore THAT I GOT IS",timeScore+"");
float timeResult = timeScore / 1000;
int errors = i.getIntExtra("err", -1);
setContentView(R.layout.endscreen);
TextView stat = (TextView) findViewById(R.id.errMsg);
stat.setText("You have completed the puzzle in "+errors+" false matches total, and it took you "+timeResult+ " seconds. Can you do better? :)");
}
}
使用onResume
和onPause
方法中的Log.d以及停止和开始时间的值,我看到这些方法的运行次数超出了我的预期,并给出了不合理的值(负值)或零)。此外,我现在看到游戏结束时,布局上的数字在1秒后从0变为3。
我该如何解决这个问题?
答案 0 :(得分:1)
我认为你想要做的是让startTime和stopTime成为静态,这样你才知道每个变量只有一个实例。我认为当活动经历它的周期时你正在失去状态。
您可能遇到的另一个问题是您正在呼叫SystemClock.currentThreadTimeMillis()
,这可能不是您想要的。你可能只想做System.currentTimeMillis()
来获得挂钟毫秒。
如果能让您走上正轨或发布一些代码,请告知我们,以便我们提供更多帮助。