// 模拟生成数据

flow {

emit(i)

}.debounce(500) // 这里是无效的 限流,因为 flow 的 emit 只执行了一次啊……

.collect {

println(“----------------->>> $it”)

}

}

那么我们理想中的正确代码逻辑是这样的:

flow {

for (i in 0…100) {

// 模拟生成数据

emit(i)

}

}.debounce(500) // 这里是有效的 限流

.collect {

println(“----------------->>> $it”)

}

好了,同学们可以再对比以上两段代码,for循环就是我们模拟的输入数据,这个for循环在里面和在外面是两个完全不一样的逻辑~不再多做解释了

正确的用法

=====

你以为的正确写法

========

对于输入框的这类业务逻辑,单纯使用flow是无法到达目的的,因为写不出来。有的小朋友要站起来高喊了,“怎么写不出来,你瞎说,我来写”,一顿操作写出了下面的代码:

// 小朋友写的错误代码

flow {

editText.doAfterTextChanged { text ->

emit(text) // 这里是错误的,emit不可以写在内部类中

}

}.debounce(500)

.collect {

println(“----------------->>> $it”)

}

错误的地方我写上了注释,emit是一个suspend挂起函数,是不可以写在内部类里的,代码直接编译不通过。

真正的正确写法

=======

首先我提一个知识点,大家回忆一下。RxJava中的流,是分为冷流热流(即:cold Observable和 hot Observable)对吧。如果你说啥,流还分冷热?亲,那这里建议你炒个回锅肉呢。

在RxJava的使用中,不注意区分冷热流,是导致RxJava错用、滥用的原因之一!

这里我只用两句话简单解释冷热流,不展开讲RxJava。

  • 冷流:只有观察者进行订阅了,上游才开始执行发射数据

  • 热流:无论有没有观察者,上游的数据都会发射

flow是冷流

=======

直接用注释说明:

flow {

// 发射数据

}.collect {

/*

只有执行了 collect 或者 collectLast 订阅了流,

上游 flow 里面的代码块才会执行!

*/

}

现在这位小朋友,冷静一下,想想输入框的业务场景是什么样子的?即:不管有没有订阅者,只要EditText文本变化了,都会发送数据。那我们就应该用热流来解决问题。

StateFlow热流登场

=============

各位大佬直接看代码吧:

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
img

最后

光有这些思路和搞懂单个知识的应用是还远远不够的,在Android开源框架设计思想中的知识点还是比较多的,想要搞懂还得学会整理和规划:我们常见的**Android热修复框架、插件化框架、组件化框架、图片加载框架、网络访问框架、RxJava响应式编程框架、IOC依赖注入框架、最近架构组件Jetpack等等Android第三方开源框架,**这些都是属于Android开源框架设计思想的。如下图所示:

image

这位阿里P8大佬针对以上知识点,熬夜整理出了一本长达1042页的完整版如何解读开源框架设计思想PDF文档,内容详细,把Android热修复框架、插件化框架、组件化框架、图片加载框架、网络访问框架、RxJava响应式编程框架、IOC依赖注入框架、最近架构组件Jetpack等等Android第三方开源框架这些知识点从源码分析到实战应用都讲的简单明了。

由于文档内容过多,篇幅受限,只能截图展示部分,更为了不影响阅读,这份文档已经打包在GitHub,有需要的朋友可以直接点此处前往免费下载

image

image

整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

opics/618156601),有需要的朋友可以直接点此处前往免费下载。**

[外链图片转存中…(img-cIi288gg-1710852736747)]

[外链图片转存中…(img-GbRsvmXh-1710852736747)]

整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

你的支持,我的动力;祝各位前程似锦,offer不断!!!

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐