

简化关于生命周期回调的代码;
计时器例子
package com.esdut.lifecycles;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.SystemClock;
import android.widget.Chronometer;
//stop() 只能停止视图刷新 不能影响时间的停留
public class MainActivity extends AppCompatActivity {
Chronometer chronometer;
private long esapsedTime;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
chronometer = findViewById(R.id.meter);
// chronometer.setBase(System.currentTimeMillis()); //UNIX 时间 1970 1-1 到现在为止的毫秒数
// chronometer.setBase(SystemClock.elapsedRealtime());//手机从上一次开机到现在, 只跟系统启动有关
//不写的话系统自动帮写SystemClock.elapsedRealtime()
chronometer.start();
}
@Override
protected void onPause() {
super.onPause();
esapsedTime = SystemClock.elapsedRealtime() - chronometer.getBase();
chronometer.stop();
}
@Override
protected void onResume() {
super.onResume();
chronometer.setBase(SystemClock.elapsedRealtime() - esapsedTime);
chronometer.start();
}
}
改进 —> 新建观察者类
package com.esdut.lifecycles;
import android.content.Context;
import android.os.SystemClock;
import android.util.AttributeSet;
import android.widget.Chronometer;
import androidx.annotation.NonNull;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleEventObserver;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.OnLifecycleEvent;
public class MyChronometer extends Chronometer implements LifecycleEventObserver {
private long elapsedTime;
public MyChronometer(Context context, AttributeSet attrs) {
super(context, attrs);
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
private void pauseMeter() {
elapsedTime = SystemClock.elapsedRealtime() - getBase();
}
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
private void resumeMeter(){
setBase(SystemClock.elapsedRealtime() - elapsedTime);
start();
}
@Override
public void onStateChanged(@NonNull LifecycleOwner source, @NonNull Lifecycle.Event event) {
}
}
本文探讨了在Android应用中如何优化计时器组件的生命周期管理,通过创建自定义的观察者类实现计时器在不同生命周期阶段的自动暂停与恢复,有效避免了资源浪费并提升了用户体验。
516

被折叠的 条评论
为什么被折叠?



