当前位置: 首页 > news >正文

黑龙江省建设厅的网站首页关键词排名软件

黑龙江省建设厅的网站首页,关键词排名软件,宽带固定ip的怎么做网站服务器,门户网站建设招标文件etpack Compose 是推荐用于构建原生 Android 界面的新工具包。后续简称Jetpack Compose为Compose。在了解State之前需要先对Compose及申明性编程式有个大概的了解。State初体验好了#xff0c;在你有一定了解的基础上#xff0c;我们先来运行几个Demo#xff0c;初步了解为何…etpack Compose 是推荐用于构建原生 Android 界面的新工具包。后续简称Jetpack Compose为Compose。在了解State之前需要先对Compose及申明性编程式有个大概的了解。State初体验好了在你有一定了解的基础上我们先来运行几个Demo初步了解为何使用state。这个例子主要是想通过点击按钮改变文案的显示。这个过程称之为重组Demo1classStateDemoActivity : AppCompatActivity() {overridefunonCreate(savedInstanceState: Bundle?) {supportActionBar?.hide()super.onCreate(savedInstanceState)WindowCompat.setDecorFitsSystemWindows(window, false)setContent {TestComposeTheme {var state falseLog.e(StateDemoActivity, hashcode:${state.hashCode()} value:${state})Column(modifier Modifier.fillMaxSize().systemBarsPadding()) {Button(onClick {state !stateLog.e(StateDemoActivity, onClick hashcode:${state.hashCode()} value:${state})}, modifier Modifier.fillMaxWidth()) {Text(text Change State:${state},color MyColorTheme.textMain,fontSize 20.sp)}}}}} } 复制代码对应输出如下StateDemoActivity E hashcode:1237 value:false StateDemoActivity E onClick hashcode:1231 value:true StateDemoActivity E onClick hashcode:1237 value:false StateDemoActivity E onClick hashcode:1231 value:true StateDemoActivity E onClick hashcode:1237 value:false复制代码可以发现点击按钮Text显示的文本没有改变没有达到预想的目的。Demo2这次我们使用官方的MutableStateTestComposeTheme {var state mutableStateOf(false)Log.e(StateDemoActivity, hashcode:${state.hashCode()} value:${state.value})Column(modifier Modifier.fillMaxSize().systemBarsPadding()) {Button(onClick {state.value !state.valueLog.e(StateDemoActivity, onClick hashcode:${state.hashCode()} value:${state.value})}, modifier Modifier.fillMaxWidth()) {Text(text Change State:${state.value},color MyColorTheme.textMain,fontSize 20.sp)}} } 复制代码输出如下显示的文案依然没有改变但相比之前多了Column之前的打印这表明方法体被重新执行了state变量的哈希值也在变化。以上表现和普通java方法别无区别state是方法中的局部变量。StateDemoActivity E hashcode:103910553 value:false StateDemoActivity E onClick hashcode:103910553 value:true StateDemoActivity E hashcode:118168247 value:false StateDemoActivity E onClick hashcode:118168247 value:true StateDemoActivity E hashcode:245965755 value:false复制代码Demo3这次我们稍作改动额外使用remember函数其他不变var state remember {mutableStateOf(false) } 复制代码输出如下按钮文字终于如预想的那样发生了变化此外有个特别的现象是state变量的哈希值并没有发生变化表明方法每次执行时state变量并没有重新创建。StateDemoActivity E hashcode:103910553 value:false StateDemoActivity E onClick hashcode:103910553 value:true StateDemoActivity E hashcode:103910553 value:true StateDemoActivity E onClick hashcode:103910553 value:false StateDemoActivity E hashcode:103910553 value:false复制代码remember方法内部必然有全局容器存储变量源码中可以很明显的看出Composable inline fun T remember(crossinline calculation: DisallowComposableCalls () - T): T currentComposer.cache(false, calculation) 复制代码综上我们可以知道Compose是依赖对State变化的观察来重新执行Compose方法准确来说Compose基于参数的比较结果来决定是否重组重组与稳定类型接上文一个 Composable 函数在重组中被调用时如果参数与上次调用时相比没有发生变化则函数的执行会跳过重组提升重组性能。需要特别说明Compose不会因为被观察的对象与上次是同一个就跳过重组。详情参考 Compose类型稳定性注解Stable ImmutableComposable的重组范围在之前的内容中我们已经知道了参数的变化会影响重组是否执行这就带了重组范围的问题。这方面大佬已经有了很好的文章。建议小伙伴先阅读# Jetpack Compose理解composable的重组范围当我阅读后用代码验证时却发现了异常代码如下classStateDemoActivity : AppCompatActivity() {privateval TAG StateDemoActivity::class.java.simpleNameoverridefunonCreate(savedInstanceState: Bundle?) {supportActionBar?.hide()super.onCreate(savedInstanceState)WindowCompat.setDecorFitsSystemWindows(window, false)setContent {TestComposeTheme {Log.e(TAG, Scope-1 run )var counter by remember {mutableStateOf(0)}Column(modifier Modifier.fillMaxSize().systemBarsPadding()) { Log.e(TAG, Scope-2 run )Button(onClick run {Log.e(TAG, Button-onClick)returnrun { counter }}) {Log.e(TAG, Scope-3 run )Text(text )}Text(text Counter:${counter},color MyColorTheme.textMain,fontSize 20.sp)}}}} } 复制代码输出如下StateDemoActivity E Scope-1 run StateDemoActivity E Scope-2 run StateDemoActivity E Button-onClick StateDemoActivity E Scope-3 run 复制代码按照文章内的说法Scope-3 run 这行是不应该被打印出来的即不应该参与重组的可实际结果却相反。小伙伴可以自己思考下稍后再往下翻看原因--------------完美的分割线^_^------------classStateDemoActivity : AppCompatActivity() {companionobject {privateval TAG StateDemoActivity::class.java.simpleName}.... } 复制代码StateDemoActivity E Scope-1 run StateDemoActivity E Scope-2 run StateDemoActivity E Button-onClick 复制代码日志终于和理解的一样了现在我们回头找原因知道问题就出在打印的变量“TAG”身上。方法中各作用域Scope都读取了变量“TAG”在第一个代码中该变量是个非稳定类型故按钮触发重组时为了保证正确性所有引用到该变量的Scope都会重组而第二个代码中“TAG”已经是个静态变量了故而是个稳定类型所以重组时不会引发非必要的重组。最后补充一点从Android View转Compose过程中对LiveData的使用场景需要特别留意。因为原本对LiveData的观察是通过observe方法进行的每次LiveData内容更新即使值一样回调依然会收到转换为State之后只有value变化了才会引发重组例如val missOut MutableLiveData(false) ... val state viewModel.missOut.observeAsState(false).value 复制代码多次调用missOut.value true,state只有在第一次设置为true时引发重组。如果希望行为和之前observe一样应该如下调用LaunchedEffect(key1 Unit) {viewModel.missOut.asFlow().collect {...} } 复制代码Android核心知识点笔记Android开发核心知识点笔记Android Framework核心知识点笔记音视频开发笔记入门到高级进阶Android Flutter核心知识点笔记与实战详解性能调优核心知识点笔记
http://www.dnsts.com.cn/news/47864.html

相关文章:

  • 汉狮做网站公司郑州技能网站建设项目需求
  • 西宁做网站建设公司哪家好免费招标平台
  • 酷狗音乐网站开发语言模板网站与定制网站的优缺点
  • 备案 网站内容桂林旅游网
  • 东莞网站建设优化企业对比插件 wordpress
  • 厦门做网站优化哪家好html动态页面代码
  • 网站简单布局图备案编号不放在网站
  • 佛山新网站建设策划沈阳网络推广优化
  • 网站开发文献综述网站如何接广告赚钱
  • 968深圳网站建设公司建设网站优点
  • 电子商务网站建设与维护李建忠下载html5网站制作
  • 自己做网站需要什么材料代理网络app
  • 能源公司网站建设网站生成海报功能怎么做
  • 空间站建造阶段做品牌的人常用的网站
  • 用开源源码做淘宝客网站免费网站电视剧全免费
  • 免费学设计的网站网站备案图片
  • 网站建设需要的设备网页展示模板
  • 专业网站定制价格便宜班级网站制作模板
  • 合肥住房城乡建设部的网站自建网站过程
  • 企业营销网站建设步骤最新电视剧在线观看免费
  • 物流公司网站制作模板在服务器上搭建网站
  • 做网站买一个域名多少钱制作图片视频的软件
  • 郑州做网站七彩科技陈村大良网站建设
  • ios移动网站开发搜狗搜索引擎优化指南
  • 教材资源网站建设seo研究中心qq群
  • 淘宝网站建设的目标是什么意思wordpress主题 演员
  • 专题型定制网站建设wordpress前台发帖
  • 国外网站建设方案基于jsp的购物网站开发
  • wordpress 用户组权限设置达州seo排名
  • 外贸网站推广如何做佛山专业网站建设哪家好