我发现,如果我在start()
之后立即致电setBase(SystemClock.elapsedRealtime())
,它将从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();
}
});
}
从此应用启动以来,它将从经过的时间开始计数。为什么?
答案 0 :(得分:1)
您描述的行为是由用户交互的异步性质引起的。您的两个示例可以按如下方式分解:
onClick
内部呼叫setBase
请注意,在第5步(设置了天文台基准)和第6步(天文台已启动)之间没有时间经过,这就是为什么当您检查它的值时,天文台正确地从0开始。
setBase
内部和onCreate
外部呼叫onClick
在此版本中,时间在第3步(设置了计时器的基线)和第6步(启动了计时器)之间经过,这就是为什么当您检查其值时计时器不从0开始的原因。