有人用 kotlin 协程特性写 android 应用么?

2020-04-22 09:52:43 +08:00
 fyooo
看了一下 《 kotlin 协程-Android 实战
》( https://juejin.im/post/5d74ad56e51d456201486eab) ,感觉协程比 RxJava 简约很多。

好像 kotlin 协程听得不多,是不是因为 android 版本 API 限制?
4432 次点击
所在节点    程序员
32 条回复
Lin0936
2020-04-22 09:58:13 +08:00
kotlin 协程是靠编译实现的, Android API 版本没有限制.
正在用 Kotlin + Jetpack 全套弄一个 APP, 坑也多, 不过写起来确实很爽
fyooo
2020-04-22 10:07:05 +08:00
@Lin0936 已发送感谢,谢谢指点
Tolcol
2020-04-22 10:08:19 +08:00
写起来很爽,正在用,主要是觉得 RxJava 包太大了,用的地方也不是很多,可以节约 2M+的包大小
gz911122
2020-04-22 10:08:52 +08:00
怎么听得不多..
现在不都在用么?
yumerdev93
2020-04-22 10:10:37 +08:00
以前刚接触 rxjava,惊叹「哇,还可以这样」,现在用了协程后觉得 rxjava 繁琐死了,不会再使用,现在项目依赖已经没有 rxjava 了。
jinhan13789991
2020-04-22 10:13:54 +08:00
已经在用了

```kotlin
override fun onClickInsertImage() {
MediaSelectService().openGallery(context, MediaType.图片, 9)
.flatMapConcat { it.asFlow() }
.flatMapConcat {
FileUploadService()
.uploadFile(UriUtils.uri2File(it).absolutePath, type)
.onStart { showLoadingListener.invoke(true) }//上传第一张就显示 dialog
}
.onCompletion { showLoadingListener.invoke(false) }//上传结束隐藏 dialog
.onEach { insertImage(it) }//插入图片
.launchInAndHandleError(scope)
}
```
MediaSelectService()是对 PermissionsUtils 和 RxImagePicker 的封装,会申请对应的权限,然后打开页面返回图片地址列表。
FileUploadService() 是对云存储的封装,会调用接口,拿到上传 token,再调用腾讯云的上传 sdk,最后拿到上传后的图片连接。
最后是把图片插入到富文本里。
launchInAndHandleError() 是对 kotlin 协程流的扩展方法,主要是全局统一处理错误异常。
我只能说,太 TMD 好用了。
jinhan13789991
2020-04-22 10:14:46 +08:00
Markdown 失败~
jeremaihloo
2020-04-22 10:15:37 +08:00
现在应该都在用吧,我反正两个项目在用了
wysnylc
2020-04-22 10:22:26 +08:00
binbinyouliiii
2020-04-22 10:26:57 +08:00
我觉得协程的特性在这种客户端上没什么明显的优点
youxiachai
2020-04-22 10:31:27 +08:00
因为...协程用起来太简单了..没啥值得说的...
你说协程的原理....的话..又不局限与 kotlin....
jinhan13789991
2020-04-22 10:38:55 +08:00
@binbinyouliiii 提升编程效率,简化代码结构。这还不算优点吗?
gz911122
2020-04-22 10:42:14 +08:00
@wysnylc

这个文章说的是错的,kotlin 的协程是真协程,作者感觉完全没认真看过 kotlin 协程的实现...
whyrookie
2020-04-22 10:51:39 +08:00
kotlin 协程+jetpack,很香的
youxiachai
2020-04-22 10:56:29 +08:00
@wysnylc 老实说,协程本质是一个状态机的规范......
我很难理解有些人说什么假协程....
讨论协程的性能的...就是实现上的区别.....
问题是,协程本质是个状态机的问题....扯实现..就扯远了...跟谈不上对比...
都是出自一个妈的论文...
感觉就跟讨论粘包一样,都不对口...
richard1122
2020-04-22 10:58:44 +08:00
小坑不少,但是挺好用的。特别是从比较上层就进入携程,工具什么的都可以提供 suspend method
binbinyouliiii
2020-04-22 12:28:20 +08:00
@jinhan13789991 你编写效率再高,也不如符合直觉的传统编程啊
rosu
2020-04-22 12:36:21 +08:00
新项目可以考虑加入。迭代旧代码就算了。suspended method 要包住一个同步方法,不然不用协程就无法调用。
nicevar
2020-04-22 12:46:43 +08:00
对写客户端来说,不太实用,个人觉得没有对编程效率没有任何提升,kotlin 的代码已经能做到很简洁了,很多时候还不如对上层进行一定的封装
gz911122
2020-04-22 13:08:40 +08:00
@binbinyouliiii 协程不比回调或者 rx 更符合直觉么?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/664869

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX