让自己创建的对象,去观察activity的生命周期,本事例是一个计数器。
创建一个新项目之后,先创建一个类MyChronometer,引入变量elapsedTime。
public class MyChronometer extends Chronometer implements LifecycleObserver {
private long elapsedTime;
public MyChronometer(Context context, AttributeSet attrs) {
super(context, attrs);
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
private void pauseMeter(){
elapsedTime = SystemClock.elapsedRealtime() - getBase();
stop();
}
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
private void resumeMeter(){
setBase(SystemClock.elapsedRealtime() - elapsedTime);
start();
}
}
Tips:
System.currentTimeMillis() UNIX时间 1970 1-1 0:00到现在经过的毫秒数 SystemClock.elapsedRealtime() 手机从上一次启动到现在所经过的毫秒数
将activity_main里的TextView改为MyChronometer,则UI页面就会出现如下的样子,分号前面代表“分”,分号后面代表“秒”。
另外,还要添加一个id,但是在添加id的时候要注意, 要将id添加到MyChronometer里面。之前我就将id不小心添加到了ConstraintLayout中,导致最后运行时闪退。
在MainActivity中创建变量 Chronometer:
public class MainActivity extends AppCompatActivity {
MyChronometer chronometer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
chronometer = findViewById(R.id.meter);
getLifecycle().addObserver(chronometer );
}
}
不能忘记依然要添加依赖:
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
最终运行结果: