使用LifeCycle解耦页面与组件

117 阅读1分钟

使用Jetpack初体验

参考# 2021年最全面的Jetpack系统学习课程,看他就够了,更新中

做了一个计时器的功能,当app退到后台时,停止计时,显示该页面时,继续计时

代码如下:

public class StepActivity extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        MyChronometer myChronometer = findViewById(R.id.chronometer);
        getLifecycle().addObserver(myChronometer);
    }
}
public class MyChronometer extends Chronometer implements LifecycleObserver {
    long elapsedTime;

    public MyChronometer(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    private void startMeter() {
        setBase(SystemClock.elapsedRealtime() - elapsedTime);
        start();
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    private void stopMeter() {
        elapsedTime = SystemClock.elapsedRealtime() - getBase();
        stop();
    }
}

使用lifecycle后有几个电话的点

之前实现该功能,需要重写onResume,onPause方法中去实现

使用lifecycle后,首先需要

getLifecycle().addObserver(***)

然后在具体的方法前添加注解

@OnLifecycleEvent(Lifecycle.Event.***)