type
status
date
slug
summary
tags
category
icon
password
日志总结

生命周期

Compose是一种声明式的UI,页面由可组合项构成。可组合项的生命周期包括:进入组合重组退出组合
Compose编译器会确定每个可组合项的调用点,如果是组合中的可组合项,每一个可组合项都有一个调用点。如果组合项的状态改变,则其会进入重组,但是为了优化性能,会智能的重组其中最小的变化了的组合项,其余的保留原本状态不变。
关于这个最小的重组单元怎么界定,Compose中规定了一些(稳定)特性:不可变或者变化后会给Compose发送通知。并且还规定了一些稳定类型诸如MutableState等。在重组中,稳定的会根据值是否改变进行重组和跳过,但是不稳定的需要全部重新重组。(这是性能问题的来源)(当然也可以强制使用@Stable稳定,但不推荐除非真的稳定)

副作用

附带效应(副作用)是指因为不可预期(执行时机、次数和范围由框架智能决定,而非开发者逐行命令控制)的重组导致外界没有得到预期的内容,而这个不可预期正是因为智能重组导致的。
智能重组有利用降低无意义的资源开支,提高软件性能,但是基于类型稳定性的重组跳过机制使得整个软件的重组变得不可预期,从而导致可组合项中某些修改外界内容的函数少次或多次执行。
由于利大于弊,最后Compose提供使用效应api,将副作用封装绑定到可组合项的生命周期中,从而实现可预测可管理。
LaunchedEffect 在某个可组合项的作用域内运行挂起函数
rememberCoroutineScope 获取组合感知作用域,便在可组合项外启动协程
rememberUpdatedState 在效应中引用某个值,该效应在值改变时不应重启
DisposableEffect 需要清理的效应
SideEffect 将Compose状态发布为非Compose代码
produceState 将非Compose状态转换为Compose状态
derivedStateOf 将一个或多个状态对象转换为其他状态
snapshotFlow 将Compose的State转换为Flow

阶段

Compose帧有三个阶段:组合布局绘制
组合控制UI树结构,布局控制尺寸和位置,绘制控制像素到屏幕。如果状态发生变化,则可以需要重新进行某些或全部阶段。
如果只有状态变了,UI结构变了则下一帧重新进入组合阶段,没变则跳过组合阶段;如果只有位置或尺寸变了,则下一帧跳过组合阶段进入布局阶段,可以使用支持lambda的延迟布局优化测量阶段的计算;如果只有外观变了,则下一帧跳过前两个阶段,重新绘制。

管理状态

 
相关项目开发需要的一些图表的总结Taoism Kernel
Loading...