监听Android视图生命周期,LifecycleObserver监听Activity生命周期

该博客介绍了如何通过自定义的MyChronometer控件,并实现LifecycleObserver接口,来实现计数器在Activity暂停时自动停止计数,恢复到前台时继续从上次位置计数。在布局文件中添加该控件,并在Activity中将其设置为生命周期观察者,即可实现这一功能。
摘要由CSDN通过智能技术生成

通过LifecycleObserver实现自动计数,退出到后台时,停止计数,当再次回到前台时从上次位置开始计数

1.自定义控件并实现LifecycleObserver

import android.content.Context;

import android.os.SystemClock;

import android.util.AttributeSet;

import android.widget.Chronometer;

import androidx.lifecycle.Lifecycle;

import androidx.lifecycle.LifecycleObserver;

import androidx.lifecycle.OnLifecycleEvent;

/**

* Chronometer 可以实现自动计数

*/

public class MyChronometer extends Chronometer implements LifecycleObserver {

private static long lastTime;

public MyChronometer(Context context, AttributeSet attrs) {

super(context, attrs);

}

//监听Activity onPause事件

@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE) //LifecycleObserver特有的写法

private void pauseMeter(){

lastTime = SystemClock.elapsedRealtime() - getBase();

stop();

}

//监听Activity onResume事件

@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)

private void resumeMeter(){

setBase(SystemClock.elapsedRealtime()- lastTime);

start();

}

}

布局中

android:id="@+id/chronometer"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Hello World!"

android:textSize="30sp"

app:layout_constraintBottom_toBottomOf="parent"

app:layout_constraintLeft_toLeftOf="parent"

app:layout_constraintRight_toRightOf="parent"

app:layout_constraintTop_toTopOf="parent" />

2.在Activity中将控件设置为Activity的生命周期观察者

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

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.chronometer);

//添加chronometer为观察者

getLifecycle().addObserver(chronometer);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值