首先,这是我的代码:
public class MyClass extends Activity {
private Runnable updateTask = new Runnable() {
public void run() {
now = SystemClock.uptimeMillis();
elapsed = duration - (now - mStart); //duration = 30000
if (elapsed > 0) {
seconds = (int) (elapsed / 1000);
minutes = seconds / 60;
seconds = seconds % 60;
mHandler.postAtTime(this, now + 1000);
}
else {
mHandler.removeCallbacks(this);
finish();
}
}
};
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mStart = SystemClock.uptimeMillis();
mHandler.post(updateTask);
this.pause.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(MyClass.this,NextActivity.class);
MyClass.this.startActivity(intent);
}
});
}
public void onStop(){
super.onStop();
mHandler.removeCallbacks(updateTask);
}
public void onRestart(){
super.onRestart();
mHandler.post(updateTask);
}
我缩短了代码以使其更易于阅读。计时器工作正常,计时器倒计时到零。我遇到的问题是,当我按下暂停按钮时,我试图“暂停”计时器。暂停按钮实际上启动了一个新的活动,它显示了一个暂停屏幕,完全阻碍了当前活动。现在我知道 SystemClock 没有暂停,所以我能做的最好的事情就是在 onStop() 中删除运行计时器 (mHandler.removeCallbacks(updateTask)) 的线程,然后在 onRestart 中调用它重新启动。
问题是当 onRestart() 时,计时器显示为好像它在暂停活动期间在后台运行。假设我在 25 秒处暂停。如果我在暂停屏幕中停留 5 秒并返回到主要活动,则计时器现在将显示 20 秒,而不是预期的 25 秒。我知道即使我在暂停屏幕中,SystemClock 仍在运行。我不知道如何操作 SystemClock 值来给我它停止的时间。
我从 StackOverflow 上的某个人那里借来了计时器代码,但我不知道“mStart”和“now”应该做什么。我已经为此工作了大约三个小时,但我仍然无法弄清楚。