Android LifeCycle监控生命周期

2024-06-03 05:48

本文主要是介绍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())}
}

LifeCycleLifecycleUtil这种第三方组件在自己的内部就可以拿到生命周期,这样原来需要写在Activity/Fragment中内部逻辑处理,在组件内部就可以独立完成,进一步解耦.

如果此时需要将LifecycleUtil的两个方法放到其他生命周期去执行,也只需改一下注解就好了,外部无需任何修改.

2.监听应用前后台切换

一些App都有在应用切换到后台时弹出一个toast,提示你正在后台运行,用Lifecycle实现很简单,同样是使用Lifecycle.EventON_StartON_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监控生命周期的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1026148

相关文章

Maven中生命周期深度解析与实战指南

《Maven中生命周期深度解析与实战指南》这篇文章主要为大家详细介绍了Maven生命周期实战指南,包含核心概念、阶段详解、SpringBoot特化场景及企业级实践建议,希望对大家有一定的帮助... 目录一、Maven 生命周期哲学二、default生命周期核心阶段详解(高频使用)三、clean生命周期核心阶

Android协程高级用法大全

《Android协程高级用法大全》这篇文章给大家介绍Android协程高级用法大全,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起学习吧... 目录1️⃣ 协程作用域(CoroutineScope)与生命周期绑定Activity/Fragment 中手

springboot2.1.3 hystrix集成及hystrix-dashboard监控详解

《springboot2.1.3hystrix集成及hystrix-dashboard监控详解》Hystrix是Netflix开源的微服务容错工具,通过线程池隔离和熔断机制防止服务崩溃,支持降级、监... 目录Hystrix是Netflix开源技术www.chinasem.cn栈中的又一员猛将Hystrix熔

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

SpringBoot监控API请求耗时的6中解决解决方案

《SpringBoot监控API请求耗时的6中解决解决方案》本文介绍SpringBoot中记录API请求耗时的6种方案,包括手动埋点、AOP切面、拦截器、Filter、事件监听、Micrometer+... 目录1. 简介2.实战案例2.1 手动记录2.2 自定义AOP记录2.3 拦截器技术2.4 使用Fi

Spring Boot Actuator应用监控与管理的详细步骤

《SpringBootActuator应用监控与管理的详细步骤》SpringBootActuator是SpringBoot的监控工具,提供健康检查、性能指标、日志管理等核心功能,支持自定义和扩展端... 目录一、 Spring Boot Actuator 概述二、 集成 Spring Boot Actuat

一文解密Python进行监控进程的黑科技

《一文解密Python进行监控进程的黑科技》在计算机系统管理和应用性能优化中,监控进程的CPU、内存和IO使用率是非常重要的任务,下面我们就来讲讲如何Python写一个简单使用的监控进程的工具吧... 目录准备工作监控CPU使用率监控内存使用率监控IO使用率小工具代码整合在计算机系统管理和应用性能优化中,监

Zabbix在MySQL性能监控方面的运用及最佳实践记录

《Zabbix在MySQL性能监控方面的运用及最佳实践记录》Zabbix通过自定义脚本和内置模板监控MySQL核心指标(连接、查询、资源、复制),支持自动发现多实例及告警通知,结合可视化仪表盘,可有效... 目录一、核心监控指标及配置1. 关键监控指标示例2. 配置方法二、自动发现与多实例管理1. 实践步骤

prometheus如何使用pushgateway监控网路丢包

《prometheus如何使用pushgateway监控网路丢包》:本文主要介绍prometheus如何使用pushgateway监控网路丢包问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录监控网路丢包脚本数据图表总结监控网路丢包脚本[root@gtcq-gt-monitor-prome