本文主要是介绍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 使用篇
这篇关于Android LifeCycle监控生命周期的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!