在日常Android开发
当中,我们肯定会遇到App
的生命周期的需求。在lifecycle
的扩展库当中有提供一个ProcessLifecycIeOwner
帮我们实现对App
的生命感知,这篇博客就来分享ProcessLifecycIeOwner
的知识,希望对看文章的小伙伴有所启发。
导入依赖
这个类需要我们导入一个扩展库,依赖语句如下所示:
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
使用代码示例
1.创建一个AppObserver
实现LifecycleObserver
接口:
import androidx.lifecycle.LifecycleObserver
class AppObserver : LifecycleObserver{
/**
* 在App的整个生命周期中只会被调用一次
*/
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
fun onCreate(){
Log.d(TAG,">>>>>>>>>>>>>>>>> onCreate")
}
/**
* 在App在前台出现时被调用
*/
@OnLifecycleEvent(Lifecycle.Event.ON_START)
fun onStart(){
Log.d(TAG,">>>>>>>>>>>>>>>>> onStart")
}
/**
* 在App在前台出现时被调用
*/
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
fun onResume(){
Log.d(TAG,">>>>>>>>>>>>>>>>> onResume")
}
/**
* 在App退出到后台时被调用
*/
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
fun onPause(){
Log.d(TAG,">>>>>>>>>>>>>>>>> onPause")
}
/**
* 在App退出到后台时被调用
*/
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
fun onStop(){
Log.d(TAG,">>>>>>>>>>>>>>>>> onStop")
}
/**
* 理论上是不会触发这个事件的,因为系统不会分发,在项目当中可以不写这个事件
*/
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
fun onDestroy(){
Log.d(TAG,">>>>>>>>>>>>>>>>> onStop")
}
companion object {
const val TAG = "TAG"
}
}
2.在自己的Application
当中绑定:
import android.app.Application
import androidx.lifecycle.ProcessLifecycleOwner
class MyApplication : Application(){
override fun onCreate() {
super.onCreate()
ProcessLifecycleOwner.get().lifecycle.addObserver(AppObserver())
}
}
调用就是这样的简单,刚兴趣的小伙伴可以在项目当中用起来。目前在项目当中可以获取到App
生命周期大概有以下几个:
- Lifecycle.Event.ON_CREATE;
- Lifecycle.Event.ON_START;
- Lifecycle.Event.ON_RESUME;
- Lifecycle.Event.ON_PAUSE;
- Lifecycle.Event.ON_STOP;
在使用过程当中需要注意有以下几点:
-
Lifecycle.Event.ON_CREATE
,只会调用一次。、 -
Lifecycle.Event.ON_DESTROY
,不会有响应的,别写业务代码,要不然就成为BUG了。 - 当我们直接通过
Home
键或者其他方式退到后台的情况,会依次调用Lifecycle.Event.ON_PAUSE
和Lifecycle.Event.ON_STOP
,然后会出现延迟的情况。
完整的AppObserver模板(可复制修改)
import android.util.Log
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleObserver
import androidx.lifecycle.OnLifecycleEvent
class AppObserver : LifecycleObserver{
/**
* 在App的整个生命周期中只会被调用一次
*/
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
fun onCreate(){
Log.d(TAG,">>>>>>>>>>>>>>>>> onCreate")
}
/**
* 在App在前台出现时被调用
*/
@OnLifecycleEvent(Lifecycle.Event.ON_START)
fun onStart(){
Log.d(TAG,">>>>>>>>>>>>>>>>> onStart")
}
/**
* 在App在前台出现时被调用
*/
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
fun onResume(){
Log.d(TAG,">>>>>>>>>>>>>>>>> onResume")
}
/**
* 在App退出到后台时被调用
*/
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
fun onPause(){
Log.d(TAG,">>>>>>>>>>>>>>>>> onPause")
}
/**
* 在App退出到后台时被调用
*/
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
fun onStop(){
Log.d(TAG,">>>>>>>>>>>>>>>>> onStop")
}
companion object {
const val TAG = "TAG"
}
}
网友评论