- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
Compose系列四⽣命周期
本系列是我学习compose过程中,对官⽅⽂档的翻译和解读,以及实验性的Demo⼯程。主要参考官⽅⽂档和中⽂⼿册
全部的正⽂内容(Demo⼯程除外)源⾃Compose官⽅⽂档,个⼈解读以引⽤的形式插⼊。
Compose官⽅⽂档
Compose中⽂⼿册
本⽂翻译内容
⽣命周期的概述
(翻译成绘制)是运⾏可组合函数后⽣成的结果,它是⼀个树状的结构,描述着的各个
CompositionappUI
当Jetpack第⼀次运⾏可组合函数时,也叫作initialcomposition,Jetpack会跟踪你所调⽤的所有可组合函数。然后,当app的状态改变
时,会触发⼀次(翻译成重绘)。重绘是指随着状态的改变,那些把该状态作为⼊参的可组合函数,会被重新
JetpackrecompositionJetpack
运⾏⼀遍。任何状态的改变都是通过重绘的⽅式反映到UI上的。
Composition只能通过initialcomposition和recomposition来⽣成。⽽改变⼀个已经存在的composition只能通过recomposition
Diagramshowingthelifecycleofacomposable
如图,⼀个可组合函数的⽣命周期分三部分,分别是initialcomposition时进⼊⼀个composition,然后是随着状态的改变recomposition0次或
多次,最后是离开这个composition
重绘往往是通过State对象的变化触发的。JetpackCompose会跟踪这些State对象,当它们改变时,把它们作为⼊参的可组合函数们也被重
新执⾏。
如果⼀个可组合函数被重复调⽤了多次,那么在该Composition中会创建多个实例,每⼀个实例有独⽴的⽣命周期
@Composable
funMyComposable(){
Column{
Text(Hello)
Text(World)
}
}
Compose中每⼀个UI组件的⽣命周期被⼤⼤简化了,⽽不是像传统View中的⼀系列过程
所以我们编码时,只需要关注三个点。⼀是UI的初始化时机,⼆是UI的重绘时机,三是UI的Remove时机
对Composition中⼀个Composable的解析
Composition对每⼀个Composable的实例分配⼀个独⼀⽆⼆的标识,这个标识由该Composable的调⽤点决定,称为callsite。在不同的call
site调⽤同⼀个可组合函数,会创建多个不同的Composable实例
callsite就是源代码中可组合函数的调⽤位置
如果⼀个可组合函数发⽣了重绘,且重绘前后的两次绘制中,调⽤了不同的⼦可组合函数,Compose会根据callsite标记出哪些是两次都调
⽤了的,哪些是只有第⼆次才调⽤的。对于前者,如果它们的⼊参没有改变,那就跳过。对于后者,则是initialcomposition。如下例
假设第⼀次是
//showErrorFalse
第⼆次是
//showErrorTrue
@Composable
funLoginScreen(showError:Boolean){
if(showError){
LoginError()
}
LoginInput()
}
@Composable
funLoginInput(){/*...*/}
LoginScreen发⽣重绘前后,都会调⽤LoginInput,
文档评论(0)