#每天一个知识点#
Android Studio 内置Compose实时模板系列
操作方式:选中Compose代码片段,输入缩写,按下 Tab 自动包裹
缩写 名称 功能
WC Wrap Column 用 Column {} 包裹选中代码
WR Wrap Row 用 Row {} 包裹选中代码
W Wrap Box 用 Box {} 包裹选中代码
WS Wrap Surface 用 Surface {} 包裹选中代码WCrd Wrap Card 用 Card {} 包裹选中代码
补充:
1. 这一类 Wrap 模板是实时模板(Live Template),不是系统快捷键,靠缩写+Tab触发。
2. 查看/管理位置:Settings → Editor → Live Templates → Compose
3. 配套查看函数全部参数:
Windows: Alt + Enter → Show function parameters
Mac: Option + Enter
#每天一个知识点#
Jetpack Compose配合ViewModel托管状态,可解决remember在屏幕旋转、配置变更后状态丢失问题,实现UI与业务解耦,也是CMP跨平台标准实践。ViewModel生命周期独立于Compose页面,配置变更不会销毁实例,依靠viewModelScope安全执行协程。
```kotlin
class CounterVM : ViewModel() {
private val _count = MutableStateFlow(0)
val count = _count.asStateFlow()
fun add() { _count.value += 1 }
}
@Composable
fun CounterScreen(vm: CounterVM = viewModel()) {
val count by vm.count.collectAsStateWithLifecycle()
Column(horizontalAlignment = Alignment.CenterHorizontally) {
Text(text = "计数:$count", fontSize = 22.sp)
Button(onClick = { vm.add() }) { Text("点我+1") }
}
}
```
1. MutableStateFlow:可变状态源,私有封装,禁止外部直接修改;asStateFlow对外只暴露只读流,遵循单向数据流。
2. collectAsStateWithLifecycle:带生命周期感知的订阅,页面后台自动暂停收集,节约资源、防止内存泄漏,优于collectAsState。
3. viewModel():获取ViewModel实例,页面重组复用同一个对象,Activity重建仍保留数据。
4. 业务逻辑全部收拢在VM,Composable只负责订阅状态、渲染UI、转发点击事件,UI层不存业务数据。
对比remember本地状态:remember适合组件内部临时轻量状态;ViewModel适合页面级业务数据、接口请求、需要跨配置保留的状态。
![[玫瑰]](//lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_103.6c2eed8.png)
![[玫瑰]](//lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_103.6c2eed8.png)
Jetpack Compose配合ViewModel托管状态,可解决remember在屏幕旋转、配置变更后状态丢失问题,实现UI与业务解耦,也是CMP跨平台标准实践。ViewModel生命周期独立于Compose页面,配置变更不会销毁实例,依靠viewModelScope安全执行协程。
```kotlin
class CounterVM : ViewModel() {
private val _count = MutableStateFlow(0)
val count = _count.asStateFlow()
fun add() { _count.value += 1 }
}
@Composable
fun CounterScreen(vm: CounterVM = viewModel()) {
val count by vm.count.collectAsStateWithLifecycle()
Column(horizontalAlignment = Alignment.CenterHorizontally) {
Text(text = "计数:$count", fontSize = 22.sp)
Button(onClick = { vm.add() }) { Text("点我+1") }
}
}
```
1. MutableStateFlow:可变状态源,私有封装,禁止外部直接修改;asStateFlow对外只暴露只读流,遵循单向数据流。
2. collectAsStateWithLifecycle:带生命周期感知的订阅,页面后台自动暂停收集,节约资源、防止内存泄漏,优于collectAsState。
3. viewModel():获取ViewModel实例,页面重组复用同一个对象,Activity重建仍保留数据。
4. 业务逻辑全部收拢在VM,Composable只负责订阅状态、渲染UI、转发点击事件,UI层不存业务数据。
对比remember本地状态:remember适合组件内部临时轻量状态;ViewModel适合页面级业务数据、接口请求、需要跨配置保留的状态。
![[玫瑰]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_103.6c2eed8.png)
![[玫瑰]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_103.6c2eed8.png)
展开
评论
1