Android-Jetpack-ProcessLifecycIeOwner监听App的生命周期

图片来源网络

在日常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_PAUSELifecycle.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"
    }
}

版权声明:
作者:lichengxin
链接:https://www.techfm.club/p/47699.html
来源:TechFM
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>