Compose笔记(三)--DisposableEffect

        这一节了解一下DisposableEffect,它是一个可组合函数,主要用于在可组合项进入组合时执行初始化操作,并且在可组合项从组合中移除时执行相应的清理操作。其核心目的是管理与可组合项生命周期相关的资源,避免资源泄漏,比如注册和注销监听器、打开和关闭数据库连接等操作都可以借助它来完成。

 基本用法:

       DisposableEffect 接收一个或多个键(key)以及一个 Lambda 表达式。当可组合项首次组合时,会执行 Lambda 表达式中的代码。该 Lambda 表达式需要返回一个 DisposableEffectScope 类型的对象,其中包含一个 onDispose 方法,这个方法会在可组合项从组合中移除时被调用,用于执行清理操作。

import androidx.compose.runtime.*
import androidx.compose.material3.Text
import android.util.Log@Composable
fun BasicDisposableEffectExample() {DisposableEffect(Unit) {// 初始化操作,例如注册监听器Log.d("DisposableEffect", "可组合项进入组合,执行初始化操作")// 定义清理操作onDispose {Log.d("DisposableEffect", "可组合项从组合中移除,执行清理操作")}}Text("这是一个基本的 DisposableEffect 示例")
}

分析:DisposableEffect 接收 Unit 作为键。当可组合项首次组合时,会打印初始化操作的日志;当可组合项从组合中移除时,会打印清理操作的日志。

import androidx.compose.runtime.*
import androidx.compose.material3.Button
import androidx.compose.material3.Text
import android.util.Log@Composable
fun DisposableEffectWithKeyExample() {var counter by remember { mutableStateOf(0) }DisposableEffect(counter) {// 初始化操作Log.d("DisposableEffect", "可组合项进入组合或键变化,当前计数器值: $counter,执行初始化操作")// 定义清理操作onDispose {Log.d("DisposableEffect", "可组合项从组合中移除或键变化,当前计数器值: $counter,执行清理操作")}}Button(onClick = { counter++ }) {Text("增加计数器")}
}

分析:DisposableEffect 的键是 counter。每次点击按钮使 counter 的值改变时,会先执行之前的清理操作,然后重新执行初始化操作。

 注意: 1 避免在 onDispose 中执行耗时操作,onDispose 方法会在可组合项从组合中移除时立即执行,因此不要在其中执行耗时操作,以免影响 UI 的流畅性。如果需要执行耗时操作,建议使用协程或其他异步机制。2 确保资源的正确释放,在 onDispose 方法中,要确保正确释放所有在初始化操作中获取的资源,避免资源泄漏。例如,如果在初始化时注册了监听器,在 onDispose 中要确保注销该监听器。

与 LaunchedEffect 的区别

       1 LaunchedEffect 主要用于在可组合项组合时启动协程执行异步操作,它关注的是异步任务的执行。

       2 DisposableEffect 更侧重于资源的管理,即初始化和清理操作。虽然 LaunchedEffect 也会在可组合项移除时取消协程,但它不是专门用于资源清理的。

 

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

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

相关文章

无人机PX4飞控 | PX4源码添加自定义uORB消息并保存到日志

PX4源码添加自定义uORB消息并保存到日志 0 前言 PX4的内部通信机制主要依赖于uORB(Micro Object Request Broker),这是一种跨进程的通信机制,一种轻量级的中间件,用于在PX4飞控系统的各个模块之间进行高效的数据交换…

XCCL、NCCL、HCCL通信库

XCCL提供的基本能力 XCCL提供的基本能力 不同的XCCL 针对不同的网络拓扑,实现的是不同的优化算法的(不同CCL库最大的区别就是这) 不同CCL库还会根据自己的硬件、系统,在底层上面对一些相对应的改动; 但是对上的API接口…

Docker快速部署高效照片管理系统LibrePhotos搭建私有云相册

文章目录 前言1.关于LibrePhotos2.本地部署LibrePhotos3.LibrePhotos简单使用4. 安装内网穿透5.配置LibrePhotos公网地址6. 配置固定公网地址 前言 想象一下这样的场景:你有一大堆珍贵的回忆照片,但又不想使用各种网盘来管理。怎么办?别担心…

【Java计算机毕业设计】基于Springboot的物业信息管理系统【源代码+数据库+LW文档+开题报告+答辩稿+部署教程+代码讲解】

源代码数据库LW文档(1万字以上)开题报告答辩稿 部署教程代码讲解代码时间修改教程 一、开发工具、运行环境、开发技术 开发工具 1、操作系统:Window操作系统 2、开发工具:IntelliJ IDEA或者Eclipse 3、数据库存储&#xff1a…

深入解析Python机器学习库Scikit-Learn的应用实例

深入解析Python机器学习库Scikit-Learn的应用实例 随着人工智能和数据科学领域的迅速发展,机器学习成为了当下最炙手可热的技术之一。而在机器学习领域,Python作为一种功能强大且易于上手的编程语言,拥有庞大的生态系统和丰富的机器学习库。其…

高斯光束介绍及光斑处理

常规激光器的光斑为高斯光斑,即中心能量集中,边缘能量较低。一般定义光强的处为高斯光束的半径。高斯光斑的传输由光斑半径、远场发散角、波长等决定。 其中为位置z处的光斑半径,w(z), k2pi/λ为波矢,λ为光波长,R为高…

C++哈希(链地址法)(二)详解

文章目录 1.开放地址法1.1key不能取模的问题1.1.1将字符串转为整型1.1.2将日期类转为整型 2.哈希函数2.1乘法散列法(了解)2.2全域散列法(了解) 3.处理哈希冲突3.1线性探测(挨着找)3.2二次探测(跳…

【Redis】List 类型的介绍和常用命令

1. 介绍 Redis 中的 list 相当于顺序表,并且内部更接近于“双端队列”,所以也支持头插和尾插的操作,可以当做队列或者栈来使用,同时也存在下标的概念,不过和 Java 中的下标不同,Redis 支持负数下标&#x…

携程Java开发面试题及参考答案 (200道-上)

说说四层模型、七层模型。 七层模型(OSI 参考模型) 七层模型,即 OSI(Open System Interconnection)参考模型,是一种概念模型,用于描述网络通信的架构。它将计算机网络从下到上分为七层,各层的功能和作用如下: 物理层:物理层是计算机网络的最底层,主要负责传输比特流…

IM 即时通讯系统-51-MPush开源实时消息推送系统

IM 开源系列 IM 即时通讯系统-41-开源 野火IM 专注于即时通讯实时音视频技术,提供优质可控的IMRTC能力 IM 即时通讯系统-42-基于netty实现的IM服务端,提供客户端jar包,可集成自己的登录系统 IM 即时通讯系统-43-简单的仿QQ聊天安卓APP IM 即时通讯系统-44-仿QQ即…

AlexNet论文代码阅读

论文标题: ImageNet Classification with Deep Convolutional Neural Networks 论文链接: https://volctracer.com/w/BX18q92F 代码链接: https://github.com/dansuh17/alexnet-pytorch 内容概述 训练了一个大型的深度卷积神经网络&#xf…

扩散模型(三)

相关阅读: 扩散模型(一) 扩散模型(二) Latent Variable Space 潜在扩散模型(LDM;龙巴赫、布拉特曼等人,2022 年)在潜在空间而非像素空间中运行扩散过程,这…

git基础使用--4---git分支和使用

文章目录 git基础使用--4---git分支和使用1. 按顺序看2. 什么是分支3. 分支的基本操作4. 分支的基本操作4.1 查看分支4.2 创建分支4.3 切换分支4.4 合并冲突 git基础使用–4—git分支和使用 1. 按顺序看 -git基础使用–1–版本控制的基本概念 -git基础使用–2–gti的基本概念…

8.攻防世界Web_php_wrong_nginx_config

进入题目页面如下 尝试弱口令密码登录 一直显示网站建设中,尝试无果,查看源码也没有什么特别漏洞存在 用Kali中的dirsearch扫描根目录试试 命令: dirsearch -u http://61.147.171.105:53736/ -e* 登录文件便是刚才登录的界面打开robots.txt…

【漫话机器学习系列】076.合页损失函数(Hinge Loss)

Hinge Loss损失函数 Hinge Loss(合页损失),也叫做合页损失函数,广泛用于支持向量机(SVM)等分类模型的训练过程中。它主要用于二分类问题,尤其是支持向量机中的优化目标函数。 定义与公式 对于…

python算法和数据结构刷题[5]:动态规划

动态规划(Dynamic Programming, DP)是一种算法思想,用于解决具有最优子结构的问题。它通过将大问题分解为小问题,并找到这些小问题的最优解,从而得到整个问题的最优解。动态规划与分治法相似,但区别在于动态…

本地Deepseek添加个人知识库(Page Assist/AnythingLLM)

本地Deepseek两种方法建立知识库 前言 (及个人测试结论)法一、在Page Assist建立知识库step1 下载nomic-embed-textstep2 加载进Page Assiststep3 添加知识step4 对话框添加知识库 法二、在AnythingLLM建立知识库准备工作1.下载nomic-embed-text2.下载An…

记8(高级API实现手写数字识别

目录 1、Keras:2、Sequential模型:2.1、建立Sequential模型:modeltf.keras.Sequential()2.2、添加层:model.add(tf.keras.layers.层)2.3、查看摘要:model.summary()2.4、配置训练方法:model.compile(loss,o…

grpc 和 http 的区别---二进制vsJSON编码

gRPC 和 HTTP 是两种广泛使用的通信协议,各自适用于不同的场景。以下是它们的详细对比与优势分析: 一、核心特性对比 特性gRPCHTTP协议基础基于 HTTP/2基于 HTTP/1.1 或 HTTP/2数据格式默认使用 Protobuf(二进制)通常使用 JSON/…

文字投影效果

大家好,我是喝西瓜汁的兔叽,今天给大家分享一个常见的文字投影效果。 效果展示 我们来实现一个这样的文字效果。 思路分析 这样的效果如何实现的呢? 实际上是两组相同的文字,叠合在一块,只不过对应的css不同罢了。 首先&…