gpt4 book ai didi

java - Android - Chronometer setBase() 无法正常工作

转载 作者:行者123 更新时间:2023-11-29 22:52:16 26 4
gpt4 key购买 nike

我发现如果我在 setBase(SystemClock.elapsedRealtime()) 之后立即调用 start() 它将从 00:00 开始计数(这很好),见下文:

startButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
chronometer.setBase(SystemClock.elapsedRealtime());
chronometer.start();
}
});

但是,如果我像这样将 setBase(SystemClock.elapsedRealtime()) 放在 setOnCLickListener() 之外:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

chronometer = findViewById(R.id.main_chronometer);
startButton = findViewById(R.id.main_start_button);
resetButton = findViewById(R.id.main_reset_button);

chronometer.setBase(SystemClock.elapsedRealtime()); //no good here

startButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//chronometer.setBase(SystemClock.elapsedRealtime());
chronometer.start();
}
});
}

它将从该应用程序启动后耗时开始计算。为什么?

最佳答案

您描述的行为是由用户交互的异步性质引起的。你的两个例子可以分解如下:

调用 setBaseonClick

  1. 应用发布
  2. 用户界面已配置;点击监听器设置在按钮上
  3. 时间流逝...
  4. 用户点击按钮
  5. 计时器基线设置为当前时间
  6. 计时器已启动

请注意,在第 5 步(设置计时器基线)和第 6 步(启动计时器)之间没有时间流逝,这就是为什么当您检查其值时计时器正确地从 0 开始。

onCreate 内部和 onClick 外部调用 setBase

  1. 应用发布
  2. 用户界面已配置;点击监听器设置在按钮上
  3. 计时器基线设置为当前时间
  4. 时间流逝...
  5. 用户点击按钮
  6. 计时器已启动

在此版本中,时间在第 3 步(设置计时器基线)和第 6 步(启动计时器)之间流逝,这就是为什么当您检查其值时计时器不会从 0 开始。

关于java - Android - Chronometer setBase() 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57778771/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com