我从代码实验室学习生命周期感知组件,它从计时表的例子开始。在步骤2中,我有一个疑问。这些是供参考的代码文件
时间活动2.java
package com.example.android.lifecycles.step2;
import android.arch.lifecycle.ViewModelProviders;
import android.os.Bundle;
import android.os.SystemClock;
import android.support.v7.app.AppCompatActivity;
import android.widget.Chronometer;
import com.example.android.codelabs.lifecycle.R;
public class ChronoActivity2 extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// The ViewModelStore provides a new ViewModel or one previously created.
ChronometerViewModel chronometerViewModel
= ViewModelProviders.of(this).get(ChronometerViewModel.class);
// Get the chronometer reference
Chronometer chronometer = findViewById(R.id.chronometer);
if (chronometerViewModel.getStartTime() == null) {
// If the start date is not defined, it's a new ViewModel so set it.
long startTime = SystemClock.elapsedRealtime();
chronometerViewModel.setStartTime(startTime);
chronometer.setBase(startTime);
} else {
// Otherwise the ViewModel has been retained, set the chronometer's base to the original
// starting time.
chronometer.setBase(chronometerViewModel.getStartTime());
}
chronometer.start();
}
}
ChronometerView模型.java
package com.example.android.lifecycles.step2;
import android.support.annotation.Nullable;
import android.arch.lifecycle.ViewModel;
/**
* A ViewModel used for the {@link ChronoActivity2}.
*/
public class ChronometerViewModel extends ViewModel {
@Nullable
private Long mStartTime;
@Nullable
public Long getStartTime() {
return mStartTime;
}
public void setStartTime(final long startTime) {
this.mStartTime = startTime;
}
}
在上面的代码中,我们调用
设置时间()
只有一次并且只有在第一次创建ViewModel时,也就是在完全关闭后启动应用程序时。而且只有
设置时间()
方法应更新长变量
m开始时间
.在活动文件的末尾,我们调用
开始()
开始计时的方法。
怀疑:
如果我们在应用程序的生命周期内只调用一次set方法,而不是activity,那么如何更新长变量msstarttime的值,正如我们从
其他的
部分,我们是把计时表的底座作为变量。价值
开始()
返回与变量没有任何关系,因此
设置时间()
函数每秒都会被一次又一次地调用。