Jetpack组件(三)Lifecycle

news2025/1/12 16:05:57

   本篇是Jetpack组件系列文章的第三篇,将介绍第二个组件Lifecycle。Lifecycle为开发者管理 Activity 和 Fragment 生命周期提供了极大的便利,帮助开发者书写更轻量、易于维护的代码

一、Lifecycle简介

    Lifecycle用于存储有关组件(如 activity 或 fragment)的生命周期状态的信息,并允许其他对象观察此状态。Lifecycle使用事件和状态两种枚举跟踪其关联组件的生命周期状态,以下是官方的图片:

     对以上图片的流程稍加文字说明

1、状态

    状态即activity或fragment的生命周期状态,从初始态INITIALIZED开始,启动activity或fragment分别经过onCreated > onStart > onResume,而与此对应的销毁生命周期为onPause > onStop > onDestroy

2、事件

    Lifecycle持有界面的生命周期状态信息,允许其他观察者去观察其持有的状态。那如何通知其他观察者?毫无疑问是通过事件Event来的,分别有ON_CREATE、ON_START、ON_RESUME、ON_PAUSE、ON_STOP和ON_DESTROY。当界面的生命周期发生变化时,就会产生相应的事件。

二、Lifecycle使用

1、gradle导入lifecycle

    直接导入androidx.lifecycle的最新稳定版本2.5.1

implementation 'androidx.lifecycle:lifecycle-common:2.5.1'

2、自定义MainLifecycle 

    第一种方式是一种官方已经废弃的方式。实现LifecycleObserver接口,并自定义生命周期回调的方法,然后通过注解的方式实现生命周期的绑定和监听:

package com.example.jetpackdemo.lifecycle;

import android.util.Log;

import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleObserver;
import androidx.lifecycle.OnLifecycleEvent;

public class MainLifecycle implements LifecycleObserver {
    private static final String TAG = "MainLifeCycle";

    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
    void onCreate() {
        Log.d(TAG, "onCreate");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    void onStart() {
        Log.d(TAG, "onStart");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    void onResume() {
        Log.d(TAG, "onResume");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    void onPause() {
        Log.d(TAG, "onPause");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    void onStop() {
        Log.d(TAG, "onStop");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    void onDestroy() {
        Log.d(TAG, "onDestroy");
    }
}

    上面这种方式官方已经废弃了不推荐使用,第二种方式则是实现DefaultLifecycleObserver接口:

package com.example.jetpackdemo.lifecycle;

import android.util.Log;

import androidx.annotation.NonNull;
import androidx.lifecycle.DefaultLifecycleObserver;
import androidx.lifecycle.LifecycleOwner;

public class SimpleLifecycle implements DefaultLifecycleObserver {
    private static final String TAG = "SimpleLifecycle";
    @Override
    public void onCreate(@NonNull LifecycleOwner owner) {
        DefaultLifecycleObserver.super.onCreate(owner);
        Log.d(TAG, "onCreate");
    }

    @Override
    public void onStart(@NonNull LifecycleOwner owner) {
        DefaultLifecycleObserver.super.onStart(owner);
        Log.d(TAG, "onStart");
    }

    @Override
    public void onResume(@NonNull LifecycleOwner owner) {
        DefaultLifecycleObserver.super.onResume(owner);
        Log.d(TAG, "onResume");
    }

    @Override
    public void onPause(@NonNull LifecycleOwner owner) {
        DefaultLifecycleObserver.super.onPause(owner);
        Log.d(TAG, "onPause");
    }

    @Override
    public void onStop(@NonNull LifecycleOwner owner) {
        DefaultLifecycleObserver.super.onStop(owner);
        Log.d(TAG, "onStop");
    }

    @Override
    public void onDestroy(@NonNull LifecycleOwner owner) {
        DefaultLifecycleObserver.super.onDestroy(owner);
        Log.d(TAG, "onDestroy");
    }
}

3、添加Observer

    在Activity的onCreate中去添加Observer,实现对当前Activity生命周期的监听:

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ActivityMainBinding binding = DataBindingUtil.setContentView(this,R.layout.activity_main);
        getLifecycle().addObserver(new SimpleLifecycle());
        initInfo(binding);
    }

     以下是Activity生命周期切换过程中,SimpleLifecycle打印的日志:

​​​​​​​ 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/76132.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UE实现指北针效果

文章目录 1.实现目标2.实现过程2.1 设计指北针Widget2.2 实时指北2.3 添加到页面显示3.参考资料1.实现目标 在UE中实现指北针效果,GIF图如下。 2.实现过程 实现思路较为简单,即获取到当前场景的Rotation,来设置UMG的旋转角度即可。 2.1 设计指北针Widget 包括底图圆环,…

嵌入式开发学习之--通讯的基本概念

提示:本章主要了解一下通讯的基本概念,无代码 文章目录前言一、通讯的基本概念1.1串行通讯与并行通讯1.2全双工、半双工及单工通讯1.3同步通讯与异步通讯1.4通讯速率总结前言 对于嵌入式开发来说,基本就是在传递信息和解析信息,根…

Kafka高级特性解析之物理存储

1、日志存储概述 Kafka 消息是以主题为单位进行归类,各个主题之间是彼此独立的,互不影响。每个主题又可以分为一个或多个分区。每个分区各自存在一个记录消息数据的日志文件。图中,创建了一个 tp_demo_01 主题,其存在6个 Paritio…

《四叶游戏》:梦想执念·棒球1号位

《幸运四叶草》又名《四叶游戏》,是日本漫画家安达充的代表作品之一。 2005年 – 2010年在《周刊少年Sunday》上连载。是小学馆漫画赏第54回(平成20年度)少年向部门得奖作品。作品亦改编为同名电视动画和游戏。 中文名 幸运四叶草 原版名称 …

海带软件分享——玩转OpenAI聊天机器人ChatGPT(免费中文版)

目录 2022 地表最强AI聊天机器人ChatGPT诞生! 一、前言 🎄🎈 ChatGPT是OpenAI开发的一个大型预训练语言模型。它是GPT-3模型的变体,GPT-3经过训练,可以在对话中生成类似人类的文本响应。ChatGPT旨在用作聊天机器人&a…

微服务框架 SpringCloud微服务架构 28 数据同步 28.5 监听 MQ 消息

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构28 数据同步28.5 监听 MQ 消息28.5.1 直接开干28 数据同步 28.5 监听 MQ …

阿里云创建https请求

1.添加二级域名 点击域名或者解析设置 2.点击添加记录,设置二级域名,二级域名指向地址和生效时间 3.测试 成功 4.对域名进行免费CA证书申请,添加绑定域名,dns验证,CA证书算法,验证成功后提交审核,约6分…

一键部署工具easy-jenkins,界面友好,操作简单

文章目录前言一、项目地址二、使用步骤1.项目结构2.启动主类 EasyJenkinsApplication3.安装4.项目启动图三、功能点介绍1.部署列表1.添加连接(部署jar)1.添加本地项目地址2.添加服务器相关信息2.部署jar3.部署成功4.删除5.编辑2.部署记录3.数据分支1.创建…

[oeasy]python0027_整合程序_延迟输出时间_整合两个py程序

整合程序 回忆上次内容 通过搜索发现 time中有函数可以延迟 time.sleep(1) 还可以让程序无限循环 while True: 现在需要两个程序的整合 循环延迟输出时间输出怎么办?🤔 整合基础 一定要自己整合啊生命在于瞎折腾!💪 进行整合 思路就是 循环…

期末复习-大数据技术原理与应用

大数据技术原理与应用大数据基础什么促进了大数据时代的诞生?大数据的发展进程大数据的 4V 概念大数据的计算模式云计算HadoopHadoop的生态系统Hadoop 安装和使用大数据存储和管理分布式文件系统DFSHDFS 数据块计算集群中元数据需要的内存HBase shell基本命令NoSQL数…

敲开社科院与杜兰大学金融管理硕士项目的大门,开启在职读研的快乐时光

随着23考研的到来,备考的你做好准备了吗?2023年考研人数预计超过520万,达到历史新高,前段时间还有人热议,不久的将来研究生学历将成为各大国有企业入职的起步门槛。随着各个行业对人才要求的提高,考研热度持…

hadoop项目实战——奥运会数据分析

大三学期项目 hadoop MapReduce 奥运会数据分析结果: 有没需要详细实现方法的小伙伴呀?可以在评论区评论一下。 如果人多,那么后续会详细更新实现方法。

微服务保护

一、初识Sentinel 1. 雪崩问题及解决方案 微服务调用链路中的某个服务故障,引起整个链路中的所有微服务都不可用,这就是雪崩。 解决雪崩问题的常见方式有四种: (1)超时处理:设定超时时间,请求超…

【JVM】StringTable

String的基本特性 String:字符串,使用一对 ”” 引起来表示 String s1 “mogublog” ; // 字面量的定义方式String s2 new String(“moxi”); string声明为final的,不可被继承String实现了Serializable接口:表示字符串是支持序…

软件测试:随机测试

随机测试流程,自我积累,暂时作为base模板,后续会继续优化 ps:后续目标,可以完成随机测试-APP-模块初稿 1.发起随机测试 项目负责人发起随机测试,明确项目背景,筛选测试目标模块 随机测试的模…

计算机毕业设计php+vue基于微信小程序的音乐云系统-音乐播放系统

项目介绍 随着计算机技术的高速发展,现代计算机系统已经从以计算为中心向以信息化处理为中心的方向发展。如何充分利用互联网,这是大家共同关心的问题。本文主要介绍了关于音乐云微信小程序的实现方法,设计规划了音乐云微信小程序的网页,以互联网的形式将分散的用户进行统一管理…

数据库大作业——学生选课系统(基于SpringBoot+Mysql)

文章目录一、需求分析1、项目背景2、项目目标二、系统功能分析1、多角色划分2、模块功能详述三、系统架构1、技术选型2、系统分析3、架构设计4、系统演变四、数据库设计1、概念结构设计2、逻辑结构设计3、物理结构设计五、系统优化1、缓存2、池化技术3、读写分离4、后续优化3、…

Java项目中集成Redis提升系统的性能

概述 安装Redis 安装 启动Rocky Linux 9.0,在浏览器中打开web console. 如果没有安装Web console,按以下步骤安装启用: 安装命令: # dnf install cockpit 启用并运行服务 # systemctl enable --now cockpit.socket 开通防火墙&…

Xinlei cheng报告学习

上面是 下面是momuten encoder 关键词 variance 方差 asymmetric不对称 momentum encoder 动量 dimension维度 convergence收敛 symmetrizationsy均衡 contrastive learning 对比学习 autoregressive自回归 distillation蒸馏 没有 fc layer +bn 裁剪后variance方差变大 cum…

canvas截取多个视频的第一帧,第n秒画面

业务涉及视频预览,不点击视频则不播放而是先展示视频的画面给到用户 “因为本人特别喜欢梅艳芳,所以也留存了很多她的视频,这里就以她的视频做测试了” 截取多个视频的第一帧,使用:Promiseloadeddata事件canvas Pro…