【发布时间】:2021-07-08 06:07:09
【问题描述】:
我正在尝试为我的统计活动创建简单的秒表。它需要做的是在活动第一次创建时开始,然后计数直到我重置它。我使用的代码:
String trip_time;
long millis;
long start_time;
Handler Handler;
private boolean started = false;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Handler.postDelayed(Runnable, 10L);
if (!started) {
start_time = System.currentTimeMillis();
started = true;
}
}
private final Runnable Runnable = new Runnable() {
@Override
public void run() {
millis = (System.currentTimeMillis() - start_time);
long seconds = millis / 1000;
trip_time = String.format(Locale.getDefault(), "%02d:%02d:%02d", seconds / 3600, seconds / 60, seconds % 60);
Handler.postDelayed(Runnable, 10L);
}
};
但是,当我有意进行活动或活动重新启动时,秒表会重置并从 0 开始计数。经过几次重置后,它会继续从基本时间开始计数。我能以某种方式摆脱这个问题吗?可能通过课程或其他方式。
【问题讨论】:
-
您可以在 ViewModel 类中添加计时器并在活动中获取时间。因此,当活动重新创建、配置更改等时,您的数据不会破坏。
-
你必须保存类变量 onSaveInstanceState 并在 onCreate 中恢复它们
标签: java android android-activity stopwatch