动态规划通过保存已经计算过的结果,优化计算所有可能性的过程。 下面几种问题都牵扯所有可能性的计算:优化问题:在所有可能的解决方案中,寻找用时最短/代价最少的等。【例】爬楼的最低成本求所有解:需要求出所有的情况,而不是选出其中的一个。【例】斐波那契数列背包问题:给定候选物品与限制,求最佳选择方案。解题步骤动态规划是一个思想,不是某个具体的算法。它分为好几个步骤,不同步骤要寻找各自的算法。寻找递...
总结:如果能满足需求,尽量使用 animate*AsState()。若需要控制起始值则使用 Animatable。状态切换动画Android View 体系中,动画几乎默认就是属性动画了。同学们对它的原理应该不陌生,无非是高频地连续地修改 View 属性从而达到动画的效果。Compose 中组件自己不再有状态,但状态没有消失,通常以 MutableState 的方式存储在某个地方,对状态的修...
这篇就是总结一下不同数据类、不同 UI 框架下生命周期的处理问题。生命周期传统生命周期Android 生命周期是老生常谈的话题了。回想 7 年前梦开始的时候,Android 的生命周期还高度依赖 Activity / Fragment 的回调。那时的代码丑陋不堪,一不注意就会漏写哪一部分。后来 Android 官方推出了 lifecycle 库集中处理这些东西。个人认为 lifecycle ...
对于大部分人,学习协程的目的是使用协程,Kotlin 官方的协程框架也是采用这种风格,因此完成了自己打造的框架,对于官方 API 的理解可以提升一个层次,再使用的话自然手到擒来了。源码在每一章节的开头(如果有必要的话)delay 函数CoroutineA 的目标是只使用协程标准库,即到不导入任何 kotlinx.coroutines 包。一个非常方便的函数 delay() 其实属于 kotl...
.gist-file .gist-data {max-height: 400px;max-width: width:100%;}上一节我们已经了解的 Kotlin 协程的基础设施,同时也强调了这些不是面向开发者的,需要经过一些封装才适用于生产。诚然,一般情况下开发者不用学习这些,只需要知道 kotlinx 为我们封装好的框架如何使用就行了。不过既然叫深入 Kotlin 协程,当然不能那么浮...
SideEffect 官方翻译成「副作用」或「附带效应」。首先应该明确的是,副作用只是除了目标效果之外,附带的效果,不见得是不好的。不要把副作用和坏作用混为一谈。大概官方翻译成「附带效应」也是这个用意吧。在编程上副作用普遍指,一个函数修改了外部状态(比如修改全局变量或打印输出)。更加精准的定义是:如果把一个函数删掉,用它的返回值替代过来,是否影响逻辑?对于没有返回值的函数更简单:能不能直接把...
注解有时候也称为「元编程」,它是对代码本身进行编码,让程序自动生成代码。这种理解有一点狭义,注解不一点要生成代码,也可能只是给其他代码或 IDE 作为参考。例如 @Deprecated 就是很好的例子。在 java 中,定义注解语法如下:@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) public @interfa...
函数调用与闭包默认情况先 Gradle 使用 Groovy 语言,可选使用 Kotlin DSL 语法。这里就以 Groovy 为例,看一个常见的代码段:android { compileSdkVersion 30 defaultConfig { applicationId "com.hencoder.gradlebuildscript" min...