kotlin_android
λ:
一直想写这份笔记。单是kotlin
,就值得写。而kotlin
早已被定为android
开发一等语言,这也是kotlin
最大的用武之地,所以把这两个东西放一块。
我大二决定用kotlin
写andorid
的时候,Google刚把它置为一等开发语言两年多,市场大多数项目还是java
,网上教程和学校里教的,也都还是java
版本。但是我还是一如既往,不喜欢被牵着走。我花时间去读kotlin
文档,如haskell rust scala
等语言一样,是现在流行的“函数式”风格。语法设计简单先进,并没有难的地方,但又是强大灵活。
写这种语言,代码量不多,但是动脑子多,怎样用最精简又不邪恶的写法实现一个功能,是真正体现水平的。就像我现在工作中正在写的flutter
项目,一个功能函数被洋洋洒洒写了一页代码,乍一看肯定是复杂功能。但其实是因为糊代码惯了,动不动定临时变量、for循环,再加上算法学的糟糕,才会写出这种糟糕的代码。这个函数我重写后只有一行代码,本着“不能邪恶”的原则,我拆成两行。所以,真的是业务逻辑复杂吗,总觉得是基础不过关。写东西不动脑子一通糊。我感觉我现在专职删代码。
那时kotlin
还在1.2.*
,协程还没稳定。而android
还没重构andoridx
库,也没有jetpack
。当时好用的kotlin android库是anko
,现在已经停止维护,因为有了jetpack
。尽管如此,单凭kotlin
语言和原有库的支持,已经比java
好太多了。
现在,Google出了androidx jetpack
,kotlin 协程
也早就稳定,更重要的是Google健全了开发文档。andorid developer 官网 从mvvm
架构,到组件和工具的最佳组合,都有详细文档。同时还有jetpack
最佳实践demo应用:sunflower。并且明确说明部分内容只支持kotlin
。
要是新起个项目还是用java
或者换汤不换药:仅仅是换个语言,架构和库仍是老旧过时。那就太不应该了,在我看来只是不爱学习罢了,其他都是借口。别人费力才去掉的诟病、糟粕,全都被找回来,还觉得自己起个架构很牛逼,优越感油然而生,于是觉得没人比得上自己,不必学习靠现有的知识储量也能胜任工作。因为不学习,所以遇到问题又拿出远古的解决方案…… 这就是循环。
关于坏习惯,不能再展开了。因为这些坏习惯导致了项目不断变糟糕。现在之所以重新拾起学习android新库这件事,是因为现有的正在开发的flutter项目
因为StatefulWidget Provider
等滥用、功能暴力实现等等导致性能出现大问题,而且功能还是不稳定的。以前只有一两个人开发的时候,我还有救场和修正的余地,但是现在人多了,我根本修不过来。人多不一定力量大,不看文档照葫芦画瓢写出来的东西,在我看来是在添乱。一个简单的列表,能有肉眼可见的掉帧卡顿,实现得有多糟糕。我优化了首页列表,可是这种实现还有很多,总不能我挨个重构,而且我一己之力追不上这么多人“创造”的速度。而且有点难度的需求和样式,就会说sdk不支持,我们不是原生之类的。实际并不是,所以这种需求都是我接,一群人说着这不行那不行的时候,我就说一个“可以”,然后就都不说话了。现在又换了新的说法:需求不合理,没有这么做的。产品就会说哪些主流app就是这样的… 不是sdk做不到,是用的人不知道sdk能做。
摆在我这的有两条路,用flutter
重构掉糟糕的实现,或者用原生从头构建,android ios
各一套。我估计了一下,要是flutter
修改的话,无异于从头写,也就省去第一次写时的踩坑时间。而且之后的新需求肯定还会出这种问题,难道要不断地这样推翻写好的东西,为什么不在第一实现的时候多学学,好好写? 既然无异于从头写,不如直接原生重构,原生里写的烂和好性能应该不会有太大差距,当然有可能又是我想多了…
学习来源:
gradle android 配置 build 变体 | 2022.08.19 |
Android RecyclerView | 2022.02.25 |
Android DataStore | 2022.02.24 |
Android 底部导航栏+页面切换 | 2021.9.9 |
kotlin 回调转协程挂起函数 | 2021.8.7 |
gradle迁到kts, 以及module管理 | 2021.08.29 |
android 依赖注入 | 2021.08.21 |
android ViewBinding, DataBinding | 2021.04.23 |
Android Skia图形库 | 2020.12.17 |
Android navigation组件 | 2020.11.24 |
android mvvm架构 | 2020.10.23 |