まず最初に、これが私のコードです:
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 秒間表示され、メイン アクティビティに戻ると、タイマーが本来の 25 秒ではなく 20 秒を表示するようになりました。一時停止画面にいるにもかかわらず、SystemClock がまだ実行されていることを理解しています。SystemClock の値を操作して、中断した時刻を取得する方法についての手がかりがありません。
ここ StackOverflow の誰かからタイマー コードを借りましたが、「mStart」と「now」が何をすべきかわかりません。私はこれに約3時間取り組んでいますが、まだこれを理解できません。