LifeCycle的作用是感知组件(Activity/Fragment)的生命周期 , 并在合适的生命周期执行分配的任务.
1.监听组件生命后期
假设我们此时有一个Util类,其中有两个方法需要分别在Activity的onStart和onDestory的时候执行,我们可以先让它实现LifecycleObserver:
class LifecycleUtil : LifecycleObserver {@OnLifecycleEvent(androidx.lifecycle.Lifecycle.Event.ON_START)fun startFun() {}@OnLifecycleEvent(androidx.lifecycle.Lifecycle.Event.ON_STOP)fun stopFun() {}}
然后对于任何实现了
LifecycleOwner
接口的生命周期组件,如果需要使用该Util的话,只需要添加如下一行代码即可。
lifecycle.addObserver(LocationUtil( ))
class MyActivity : AppCompatActivity(), LifecycleOwner {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_my)lifecycle.addObserver(LifecycleUtil())}}
LifeCycle
让
LifecycleUtil
这种第三方组件在自己的内部就可以拿到生命周期,这样原来需要写在
Activity/Fragment
中内部逻辑处理,在组件内部就可以独立完成,进一步解耦.
如果此时需要将
LifecycleUtil
的两个方法放到其他生命周期去执行,也只需改一下注解就好了,外部无需任何修改.
2.监听应用前后台切换
一些App都有在应用切换到后台时弹出一个toast,提示你正在后台运行,用Lifecycle实现很简单,同样是使用
Lifecycle.Event
的
ON_Start
和
ON_STOP.
然后在应用启动时 , 在ContentProvider或Application中调用如下代码:
ProcessLifecycleOwner.get().lifecycle.addObserver(LifecycleUtil())
class MyApplication : Application() {override fun onCreate() {super.onCreate()ProcessLifecycleOwner.get().lifecycle.addObserver(LifecycleUtil())}}
ProcessLifecycleOwner
可以感知整个进程的生命周期,监控应用的前后台切换轻而易举.
使用ProcessLifecycleOwner可能需要在build.grade里添加依赖:
implementation \"android.arch.lifecycle:extensions:1.1.1\"或者
implementation \'androidx.lifecycle:lifecycle-extensions:2.2.0-rc03\'
3.全局管理Activity
我们经常会有这样的功能,面试官也会问这样的问题,想关闭所有Activity应该怎么做?
利用
Application.ActivityLifecycleCallbacks
有全新的方式来实现了.
class MyActivityLifeCycleCallBack : Application.ActivityLifecycleCallbacks {companion object {val instance = MyActivityLifeCycleCallBack()}private val activityList: ArrayList<Activity> = ArrayList()override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {activityList.add(activity)println(\"onActivityCreated : ${activity.localClassName}\")}override fun onActivityStarted(activity: Activity) {println(\"onActivityStarted : ${activity.localClassName}\")}override fun onActivityResumed(activity: Activity) {println(\"onActivityResumed : ${activity.localClassName}\")}override fun onActivityPaused(activity: Activity) {println(\"onActivityPaused : ${activity.localClassName}\")}override fun onActivityDestroyed(activity: Activity) {println(\"onActivityDestroyed : ${activity.localClassName}\")activityList.remove(activity)}override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle?) {}override fun onActivityStopped(activity: Activity) {println(\"onActivityStopped : ${activity.localClassName}\")}fun clearAllActivity() {for (activity: Activity in activityList) {activity.finish()}}}
通过
Application.ActivityLifecycleCallbacks
可以监听到所有Activity的生命周期,只要在
Application中
注册这个
Callback
就行了.
registerActivityLifecycleCallbacks(MyActivityLifeCycleCallBack.instance)
此时每个
Activity
的生命周期就都在我们的监控中了,如果我们想要实现关闭所有的Activity可以这样做:
在
MyActivityLifecycleCallback
我们实现了一个
clearAllActivity
的方法,很简单 , 并且将
MyActivityLifecycleCallback
做为一个单例使用.
companion object {val instance = MyActivityLifeCycleCallBack()}fun clearAllActivity() {for (activity: Activity in activityList) {activity.finish()}}
那么,在使用的时候直接调用这个方法就可以了:
总结
Lifecycle可谓神器,让我们的代码可以写的更标准,更准确.
参考 :
硬核讲解 Jetpack 之 LifeCycle 使用篇