Android - Chronometer setBase() 无法正常工作
Android - Chronometer setBase() doesn't work properly
我发现如果我在 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();
}
});
}
它将从该应用程序启动后经过的时间开始计算。为什么?
您描述的行为是由用户交互的异步性质引起的。你的两个例子可以分解如下:
在 onClick
中调用 setBase
- 应用启动
- UI已配置;点击侦听器设置在按钮上
- 时间流逝...
- 用户点击按钮
- 计时器基线设置为当前时间
- 计时器已启动
请注意,在第 5 步(设置计时器基线)和第 6 步(启动计时器)之间没有时间流逝,这就是为什么当您检查其值时计时器正确地从 0 开始。
在 onCreate
内部和 onClick
外部调用 setBase
- 应用启动
- UI已配置;点击侦听器设置在按钮上
- 计时器基线设置为当前时间
- 时间流逝...
- 用户点击按钮
- 计时器已启动
在此版本中,时间在第 3 步(已设置计时器基线)和第 6 步(已启动计时器)之间流逝,这就是为什么当您检查其值时计时器不会从 0 开始。
我发现如果我在 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();
}
});
}
它将从该应用程序启动后经过的时间开始计算。为什么?
您描述的行为是由用户交互的异步性质引起的。你的两个例子可以分解如下:
在 onClick
中调用 setBase
- 应用启动
- UI已配置;点击侦听器设置在按钮上
- 时间流逝...
- 用户点击按钮
- 计时器基线设置为当前时间
- 计时器已启动
请注意,在第 5 步(设置计时器基线)和第 6 步(启动计时器)之间没有时间流逝,这就是为什么当您检查其值时计时器正确地从 0 开始。
在 onCreate
内部和 onClick
外部调用 setBase
- 应用启动
- UI已配置;点击侦听器设置在按钮上
- 计时器基线设置为当前时间
- 时间流逝...
- 用户点击按钮
- 计时器已启动
在此版本中,时间在第 3 步(已设置计时器基线)和第 6 步(已启动计时器)之间流逝,这就是为什么当您检查其值时计时器不会从 0 开始。