文章目录
全局监听
在 api 28之前, 使用 android.app.Application.ActivityLifecycleCallbacks 监听 Activity 的生命周期。它始于 api 14(android 4.0)。从它的包名可以看出,它是 Application
级的监听接口。需要在 Application 中通过registerActivityLifecycleCallbacks(ActivityLifecycleCallbacks callback) 、 unregisterActivityLifecycleCallbacks(ActivityLifecycleCallbacks callback)
进行注册与反注册。
由于是全局性的,所以写些全局性的代码较为合适。
局部监听
用到 jetpack 中的架构组件 Lifecycles
配置
- androidx.appcompat 配置
对于使用 androidx 库,来使用兼容性的 androidx 包下的 Fragment 或 AppCompatActivity,都可以在它们内部,通过getLifecycle()
,获取到的是androidx.lifecycle.Lifecycle
androidx 还太新了,各种开源类库支持的力度不够。用了它,可能会有各种麻烦问题出现。
- support-appcompat 配置
不用androidx
,还是采用com.android.support:appcompat-v7:28.0.0
这样的配置。
同样的,通过兼容性的 support-v4下的Fragment 或 support-v7中的 AppCompatActivity,都可以在它们内部,调用getLifecycle()
,获取到的是android.arch.lifecycle.Lifecycle
所以需要另引入android.arch.lifecycle:extensions:1.1.1
使用
如上,获取 Lifecycle
,就可以 添加观察者:addObserver(LifecycleObserver observer)
,在适当时 移除观察者removeObserver(LifecycleObserver observer)
由于 LifecycleObserver
是一个空接口,没有任何抽象方法,要求自实现它,并添加 有android.arch.lifecycle.OnLifecycleEvent
注解的抽象方法。如:
import android.arch.lifecycle.Lifecycle;
import android.arch.lifecycle.LifecycleObserver;
import android.arch.lifecycle.OnLifecycleEvent;
/**
* desc :
* author : stone
* email : aa86799@163.com
* time : 2019/3/6 12 17
*/
public interface LifecycleCallback extends LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
void onCreate();
@OnLifecycleEvent(Lifecycle.Event.ON_START)
void onStart();
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
void onResume();
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
void onPause();
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
void onStop();
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
void onDestroy();
@OnLifecycleEvent(Lifecycle.Event.ON_ANY)
void onAny();
}
这样,就能在相应的生命周期方法中处理自己的逻辑了。
注意:
- 如上,使用的是观察者模式。可以添加多个观察者 LifecycleObserver 实例。
- 局部监听方式,也可以运行在低版本的设备上的;只是要求编译配置版本是 28,support-v7版本是28