AI智能
改变未来

Android LifeCycle监控生命周期

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 使用篇

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » Android LifeCycle监控生命周期