在一样寻常Android开辟当中,我们肯定会碰到App的生命周期的需求。在lifecycle的扩展库当中有提供一个ProcessLifecycIeOwner帮我们实现对App的生命感知,这篇博客就来分享ProcessLifecycIeOwner的知识,渴望对看文章的小同伴有所启发。
导入依靠
这个类须要我们导入一个扩展库,依靠语句如下所示:
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'使用代码示例
1.创建一个AppObserver实现LifecycleObserver接口:
import androidx.lifecycle.LifecycleObserverclass 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.Applicationimport androidx.lifecycle.ProcessLifecycleOwnerclass 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.Logimport androidx.lifecycle.Lifecycleimport androidx.lifecycle.LifecycleObserverimport androidx.lifecycle.OnLifecycleEventclass 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" }} |