图片来源网络
在日常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" } }