ListView与 LinearLayout 里插入一大堆 View 相比,ListView 也称得上是高性能。之所以这么讲,主要是它实现了两个关键功能:懒加载与复用。所谓懒加载就是只有某一项需要显示时才尝试解析 View、绑定数据。而复用则是随着列表的滚动,新项目直接使用那些不再可见项目的 View,只是重新绑定一下数据而已。当然,ListView 的复用不是天然的,需要开发者配合实现。同...
ListView与 LinearLayout 里插入一大堆 View 相比,ListView 也称得上是高性能。之所以这么讲,主要是它实现了两个关键功能:懒加载与复用。所谓懒加载就是只有某一项需要显示时才尝试解析 View、绑定数据。而复用则是随着列表的滚动,新项目直接使用那些不再可见项目的 View,只是重新绑定一下数据而已。当然,ListView 的复用不是天然的,需要开发者配合实现。同...
与后端相比,移动开发的架构比较后知后觉。毕竟「应用」这个东西在一开始就是轻量级的「软件」,只不过后来有了太多不可承受之重。后端最著名的 MVC 架构搬到 Android 上有各种水土不服,于是发展出 MVP,MVVM 以及最新的 MVI 等。架构一直是很神奇的东西,几乎每个正规的工程师都会用到,但又很少有人能说清楚它们到底是什么。无非是祭出那几个都包浆了的架构图片说,瞧,这就是 MVC。我一...
总结:如果能满足需求,尽量使用 animate*AsState()。若需要控制起始值则使用 Animatable。状态切换动画Android View 体系中,动画几乎默认就是属性动画了。同学们对它的原理应该不陌生,无非是高频地连续地修改 View 属性从而达到动画的效果。Compose 中组件自己不再有状态,但状态没有消失,通常以 MutableState 的方式存储在某个地方,对状态的修...
这篇就是总结一下不同数据类、不同 UI 框架下生命周期的处理问题。生命周期传统生命周期Android 生命周期是老生常谈的话题了。回想 7 年前梦开始的时候,Android 的生命周期还高度依赖 Activity / Fragment 的回调。那时的代码丑陋不堪,一不注意就会漏写哪一部分。后来 Android 官方推出了 lifecycle 库集中处理这些东西。个人认为 lifecycle ...
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...
基础ConstraintLayout 旨在代替 RelativeLayout,但实际上不能简单地理解为加强版的相对布局,因为它加强的太多了...ConstraintLayout 主要优点如下:提供强大的布局属性,几乎可以实现任何布局。扁平化布局。大幅提高测量性能。因为扁平化布局,所以便于实现 View 之间的过渡动画。当然,也不是没有缺点:性能比 LinearLayout / FrameLa...