/**
- Called when the Activity calls [super.onPause()][Activity.onPause].
*/
override fun onActivityPaused(activity: Activity) {
}
/**
- Called when the Activity calls [super.onStart()][Activity.onStart].
*/
override fun onActivityStarted(activity: Activity) {
}
/**
-
Called when the Activity calls
-
[super.onSaveInstanceState()][Activity.onSaveInstanceState].
*/
override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {
}
/**
- Called when the Activity calls [super.onStop()][Activity.onStop].
*/
override fun onActivityStopped(activity: Activity) {
}
/**
- Called when the Activity calls [super.onResume()][Activity.onResume].
*/
override fun onActivityResumed(activity: Activity) {
}
}
class MainActivity : AppCompatActivity() {
private val mPresenter = MyPresenter()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//注意这是application的方法
application.registerActivityLifecycleCallbacks(mPresenter)
// api大于等于29支持直接通过activity注册生命回调的方法
// registerActivityLifecycleCallbacks(mPresenter)
}
override fun onDestroy() {
super.onDestroy()
//不需要使用,需要解除注册
application.unregisterActivityLifecycleCallbacks(mPresenter)
}
}
采用这种方式注册后,我们就能在Activity生命周期变化的时候收到回调,从而执行相应的逻辑。因为是同步回调,所以我们要注意不能在回调方法中执行耗时操作,防止出现卡顿。
因为是注册在Application上的,mPresenter对象可以监听到Application的所有Activity的生命周期回调。
而在sdk>=29版本上,Activity也提供了自身的registerActivityLifecycleCallbacks方法,调用Activity这个方法注册的观察者将只会收到注册的Activity生命周期事件的回调。
Application.ActivityLifecycleCallbacks的优点:
通过定义Application.ActivityLifecycleCallbacks接口屏蔽了不同观察者的差异。同时在Activity的各个生命回调方法中分发事件,从根本保障了各个观察者都能在生命周期变化时接收到事件。比较通用,既能用于监听我们自身的Activity生命事件,也能监听第三方Activity事件。