1. compose与xml的ui有什么不同?
compose是一套响应式的ui框架,与xml相比,xml中数据更新时需要用户主动的进行更新,而在compose中,当数据发生改变时,表示其状态也发生了改变后,此时UI会进行智能重组,这里的智能指的是只更新跟当前数据有关系的部分UI进行更新;避免过多的重组导致性能问题。Composeable会绑定对应的state,当state发生改变时会编辑对应的Composeable为Invalid,当下一次渲染时发现为Invalid则进行重绘。ComposeUI本质上是在编译时针增加了大量代码实现了相关的数据绑定关联。
2. remember和remeberSavable有什么区别?
remember是在发生重组时能够保存值,而remeberSavable在界面发生选择时也能保存值,原因为remeberSavable是将值保存在了Bundle中,存在了saveableBundle中,保证在Activity没有彻底销毁前能够保证值不被修改;
10. 如何处理第三方的数据类型在remeberSaveable中进行保存?Saver,MapSaver,ListSaver
object CitySaver:Saver<City,Bundle>(){
override fun restore(value:Bundle):City?{
return value.getString("name")?.let{name->
value.getString("country")?.let{country->
City(name,country)
}
}
}
}
3. 如何避免重组?
4. 什么是状态上提?
5. compose中如何进行页面的跳转?如何进行参数传递?
6. compose中如何使用动画?
7. compose中如何实现自定义的控件?
8. compose如何和传统的xml项目一起开发?
9. Stateless和Stateful有什么区别?
11. 如何使用字体?
12. 如何实现主题切换?
13. 什么是CompositionLocal?作用是是什么?解决什么问题?怎么用?compositionLocalOf
14. 基础控件如何使用?Row,Column,Card等
15. Modify是什么?如何使用?调用链的先后有什么区别?
16. MulableState是什么?解决什么问题?
17. kotlin中的by关键字有哪些作用?
18. LiveData,RxJava,Flow如何转为State?
使用扩展函数,collectAsState()可以将值转为直接在@Composeable中直接进行值绑定。
19. mulableStateOf()的作用?
给数据类型增加状态;适用于基本数据类型和自定义数据类型。在获取值时需要通过.value的方式读取值.
20. @Composable修饰的函数有哪些特点?
- 必须是顶层函数
- 没有返回值
- 必须是非inline修饰的函数
- 函数名推荐大写开头
21. 为什么Composeable的函数不是按调用的顺序执行的?如何解决线程安全问题?
由于Composeable在编译后会进行修改,因此并不会按照代码的顺序进行执行,可能导致Composeable会并发执行。
22. Compose的视图树是什么样的?
- 每个composable对应视图树上的一个节点。
LayoutNodeCompositaion- Composable函数->Composition状态->存入SlotTable中->生成LayoutNode
23. 在Composable中如何因为重组导致埋点数据不准确?由于重组会导致UI多次执行产生副作用,可通过副作用函数解决多次重组产生的问题。
- 副作用函数指的是在能够在重组中安全的运行以及能够获取正确的状态的函数;一般以...Effect{}结尾。
24. @Stable和@Imutable的作用和使用场景
25. compose的生命周期是什么样的?
//在compose中,composable作为子一个树中的一个节点,通过深度优先遍历的栈结构维护整个树。 onActive()//添加 OnUpdate()//重组3 onDispose()//从视图树中移除
26. 有那些副作用的函数?
"compose中所有的副作用的函数?"点击查看元宝的回答 yb.tencent.com/s/jfyM2UgNL…
| 函数 | 作用 |
|---|---|
| LaunchedEffect(Unit) {} | 监听 onActive(首次进入组合) |
| SideEffect | 重组成功后执行 |
| DisposableEffect | 监听 onDispose(离开组合) |
| rememberUpdateState | |
| rememberCorutineScope | 开启一个协程 |
| rememberPagerState | |
| snapshotFlow | 用于将comppose中的状态转为Flow流 |
| derivedStateOf | 将多个state合并为一个,避免过多的重组,当一个计算结果依赖太多的state时,可以减少重组的次数 |
2. 绘制流程,自定义View,动画内容
27. CompositionLocalProvider的作用以及创建的方式
作用
用于在所有的子层级中隐式的传递参数,而不需要通过参数的方式进行传递。
创建方式区别
| 特性 | compositionLocalOf | staticCompositionLocalOf |
|---|---|---|
| 值变化时的重组范围 | 仅重组实际读取该值的组件 | 重组整个 CompositionLocalProvider 的 content Lambda |
| 性能特点 | 重组更精细,但每次变化都有开销 | 性能更高,重组范围更大但次数少 |
| 适用场景 | 值可能频繁变化 (如动态主题、用户偏好) | 值很少变化或永不变化 (如应用配置、Android Context) |
| Compose 是否跟踪读取 | 是 | 否 |