代码之家  ›  专栏  ›  技术社区  ›  Nishant Garg

生命周期感知代码实验室概念

  •  0
  • Nishant Garg  · 技术社区  · 6 年前

    我从代码实验室学习生命周期感知组件,它从计时表的例子开始。在步骤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的值,正如我们从 其他的 部分,我们是把计时表的底座作为变量。价值 开始() 返回与变量没有任何关系,因此 设置时间() 函数每秒都会被一次又一次地调用。

    2 回复  |  直到 6 年前
        1
  •  0
  •   Abu Yousuf    6 年前

    ViewModel setStartTime

    chronometerViewModel.getStartTime()

    Chronometer setTime()

    ViewModle

    推荐文章