不使用lifecycle,对程序运行时间进行监控。组件和activity高度耦合(为了实现在后台,不计算程序运行时间)
public class MainActivity extends AppCompatActivity {
private static final String TAG ="MainActivity" ;
Chronometer Chronometer;
Long el=0L;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(TAG, "onCreate:创建");
Chronometer = findViewById(R.id.Chronometer);
}
@Override
protected void onResume() {
Log.d(TAG, "onResume: 可交互");
super.onResume();
Chronometer.setBase(SystemClock.elapsedRealtime()-el);
Chronometer.start();
}
@Override
protected void onStop() {
Log.d(TAG, "onStop: 后台");
super.onStop();
el = SystemClock.elapsedRealtime() - Chronometer.getBase();
Chronometer.stop();
}
}
使用lifecycle
我们自定义组件,继承chronometer并实现lifecycle里面的方法。
public class MyChronometer extends Chronometer implements LifecycleObserver {
long el=0L;
public MyChronometer(Context context, AttributeSet attrs) {
super(context, attrs);
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
private void startMeter(){
setBase(SystemClock.elapsedRealtime()-el);
start();
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
private void stopMeter(){
el=SystemClock.elapsedRealtime()-getBase();
stop();
}
}
在activity里面
public class Chronometer02Activity extends AppCompatActivity {
private MyChronometer chronometer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chronometer);
chronometer =findViewById(R.id.Chronometer_2);
getLifecycle().addObserver(chronometer);
}
}
布局文件
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Chronometer02Activity">
<com.example.lifecycletest01.MyChronometer
android:id="@+id/Chronometer_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="34sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>