笔记
记忆力不是很好,特别是对于一些用不上的知识。但好像人有一个遗忘曲线,所以利用B站服务器做一个记录和整理(云服务器很贵的,而且老有些无聊的人喜欢爆破SSH和CMS密码)。
Flow
我没用过RxJava,以前都是手动实现的用于UI更新的观察者模式和生命周期管理,对于“事件订阅”也没什么概念,类似的需求都是直接开线程然后用Handle Message那一套做UI更新......后来才知道Jetpack,然后知道有ViewModel和LiveData,然后稍微用过一下。
因为之前有人把Flow和LiveData做了比较,就先入为主的认为这两个东西等价了,这是错的。
还没完全摸清楚Flow的门道,但对于Flow的定位差不多有一些了解了:
Flow和LiveData一样,是一个可观察的数据容器。同时,Flow可以在不知道具体数据的前提下对数据进行处理,而LiveData不行。
另外,Flow其实牵扯到了如何去获取数据,虽然它不关心数据是怎么来的(从数据库或网络,或者SP),但Flow承担了生产数据的任务,并不是单纯的数据的容器。
所以对于Flow的使用场景:我发现B站视频播放页面的点赞数是会实时改变的,盲猜背后是定时从服务器拿到新的点赞数。这种时候Flow就比LiveData合适,同样是可观察的数据容器,但Flow可以在观察者(消费者)获取(收集)数据时自己去生产数据,比如上面的例子,用Flow实现就是:
private val likeCount= flow<Int> { while (true){ emit(getLikeCount()) delay(1000) } }
当别的类要用到likeCount更新UI的时候,只需要观察(收集)likeCount就行了。likeCount就会每隔一秒就去获取一次最新点赞数,不需要再在别的地方开线程更新它的值。
这个likeCount的值是没办法手动改变的,所以Flow适合的场景是,数据会自动产生并更新的情况。有些时候数据是由用户产生,而且是由用户的行为更新的,比如文件管理器,当前目录的文件,是用户点击某个文件夹数据才会变......这种时候就没必要用Flow,直接LiveData或者MutableStateFlow。
对于官方说的数据流,还有“生产者” “中间商” “消费者”之类的概念,我还是有点晕,所以就按自己的理解先用着。另外还有Flow基于协程带来的一些,诸如可以避免内存泄漏(不知道当一个Activity被销毁,而它开的线程还在从服务器获取数据的情况,算不算内存泄漏)之类的好处,就不谈了。
总之,Flow就是一个可以自己决定如何产生数据的,可观察的数据容器。
目的还是服务于MVVM模式,让UI压根不需要关心数据从哪来,怎么更新,而只关心怎么展示数据。
2.Compose杂项
我还是太年轻了。Compose的水不是一般的深,根本就没有表面上那么简单,那么轻量级。
但Compose还是比View体系效率(开发效率和运行效率)更高,而且更符合直觉。我初学安卓的时候就觉得setText只要调用一次,TextView里面的文字就应该随着变量改变,每次都要设置就很奇怪。所以Compose比View更适合没写过xml的初学者。
效率更高,更容易入门,缺的就只有生态。Compose应该会在未来成为主流,值得赌一手。
话是这么说,但很多东西还没完全弄明白,先留空。
-1.你有必要成为专家
最初学的安卓,然后学了一段时间的游戏开发,又学了点逆向,黑客技术,还有后端。
基本都是蜻蜓点水。是一拍脑袋做的决定。
当时是看了点SQL注入的教程,就拿B站用户信息的界面试了下,当然是没用的。我知道肯定不行,但我想知道为什么不行,于是就看了更多的SQL注入的教程,依旧没得到答案。
直到我需要做后端,用了Springboot和Mybatis,才知道有个东西叫“预编译”。
说实话,SQL注入这种东西基本已经死透了,但是你去搜黑客教程,依旧是SQL注入起手。
这件事告诉我们什么道理呢?
1.在逆向以前首先要懂正向。
首先发现SQL注入的人肯定是个做后端的,在知道后端怎么运作的基础上,才有可能发现SQL注入。
后端都不懂就搁那注入,盲人摸象了属于是。
2.真理要靠自己去寻找
为什么现在的网站注不进去,如果我没学后端估计到现在还是懵的。所以指望从别人口中得到答案,基本是妄想。
以前觉得我只能去做逆向了,其实挺搞笑的。
事情没有那么复杂,我要做的事只有一件:
在某个领域成为专家。
这次是真的悟了,发自内心的。其实“高考”完以后,我就已经没有任何目标了,就这样一直浑浑噩噩混日子,偶尔努力一下,很快又会怀疑努力的尽头到底有什么。
没有必要思考那么多其实。什么学历,风口都是假的,首先是要成为专家,在这个基础上一切都会变得简单。
我有点过于轻视在职程序员了,觉得自己差的只是一个985的学历,以及面试的那些八股文,还有诸如热修复,组件化,依赖注入之类自己用的少的东西。
实际上不管用不用得上,能够做到的人才配被称作专家。毕竟即使强如Faker,在不打游戏的人眼里也就是一个愣头青,和同样20多岁的青铜病友并没有什么区别。
就是说,我并不能观测到别人脑袋里到底有多少知识,即使一个同领域的专家站在我面前我也不会觉得它有任何与众不同。
成为专家以后的我,并不会在头上顶着一个专家的称号,我在别人眼里还是和以前一样。
这应该就是:“智者向内寻求力量吧。”
原本及其简单,原本应该明白的事,却在看过太多冠冕堂皇的东西以后忘记了。
没什么好说的了。成为专家吧。