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

相关文章

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

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

Spring Boot集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

Android ClassLoader加载机制详解

《AndroidClassLoader加载机制详解》Android的ClassLoader负责加载.dex文件,基于双亲委派模型,支持热修复和插件化,需注意类冲突、内存泄漏和兼容性问题,本文给大家介... 目录一、ClassLoader概述1.1 类加载的基本概念1.2 android与Java Class

如何在Ubuntu 24.04上部署Zabbix 7.0对服务器进行监控

《如何在Ubuntu24.04上部署Zabbix7.0对服务器进行监控》在Ubuntu24.04上部署Zabbix7.0监控阿里云ECS服务器,需配置MariaDB数据库、开放10050/1005... 目录软硬件信息部署步骤步骤 1:安装并配置mariadb步骤 2:安装Zabbix 7.0 Server

Android DataBinding 与 MVVM使用详解

《AndroidDataBinding与MVVM使用详解》本文介绍AndroidDataBinding库,其通过绑定UI组件与数据源实现自动更新,支持双向绑定和逻辑运算,减少模板代码,结合MV... 目录一、DataBinding 核心概念二、配置与基础使用1. 启用 DataBinding 2. 基础布局

Android ViewBinding使用流程

《AndroidViewBinding使用流程》AndroidViewBinding是Jetpack组件,替代findViewById,提供类型安全、空安全和编译时检查,代码简洁且性能优化,相比Da... 目录一、核心概念二、ViewBinding优点三、使用流程1. 启用 ViewBinding (模块级

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

JVisualVM之Java性能监控与调优利器详解

《JVisualVM之Java性能监控与调优利器详解》本文将详细介绍JVisualVM的使用方法,并结合实际案例展示如何利用它进行性能调优,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录1. JVisualVM简介2. JVisualVM的安装与启动2.1 启动JVisualVM2

Android NDK版本迭代与FFmpeg交叉编译完全指南

《AndroidNDK版本迭代与FFmpeg交叉编译完全指南》在Android开发中,使用NDK进行原生代码开发是一项常见需求,特别是当我们需要集成FFmpeg这样的多媒体处理库时,本文将深入分析A... 目录一、android NDK版本迭代分界线二、FFmpeg交叉编译关键注意事项三、完整编译脚本示例四