• 请不要在回答技术问题时复制粘贴 AI 生成的内容
fyooo
V2EX  ›  程序员

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

  •  
  •   fyooo · Apr 22, 2020 · 5819 views
    This topic created in 2389 days ago, the information mentioned may be changed or developed.
    看了一下 《 kotlin 协程-Android 实战
    》( https://juejin.im/post/5d74ad56e51d456201486eab) ,感觉协程比 RxJava 简约很多。

    好像 kotlin 协程听得不多,是不是因为 android 版本 API 限制?
    32 replies  •  2020-04-22 18:20:45 +08:00
    ezrealinxh
    ezrealinxh
    Apr 22, 2020❤️1
    1
    kotlin 协程是靠编译实现的, Android API 版本没有限制.
    正在用 Kotlin + Jetpack 全套弄一个 APP, 坑也多, 不过写起来确实很爽
    fyooo
    fyooo
    OP
    Apr 22, 2020
    2
    @Lin0936 已发送感谢,谢谢指点
    Tolcol
    Tolcol
    Apr 22, 2020
    3
    写起来很爽,正在用,主要是觉得 RxJava 包太大了,用的地方也不是很多,可以节约 2M+的包大小
    gz911122
    gz911122
    Apr 22, 2020
    4
    怎么听得不多..
    现在不都在用么?
    yumerdev93
    yumerdev93
    Apr 22, 2020
    5
    以前刚接触 rxjava,惊叹「哇,还可以这样」,现在用了协程后觉得 rxjava 繁琐死了,不会再使用,现在项目依赖已经没有 rxjava 了。
    jinhan13789991
    jinhan13789991
    Apr 22, 2020
    6
    已经在用了

    ```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
    jinhan13789991
    Apr 22, 2020
    7
    Markdown 失败~
    jeremaihloo
    jeremaihloo
    Apr 22, 2020
    8
    现在应该都在用吧,我反正两个项目在用了
    binbinyouliiii
    binbinyouliiii
    Apr 22, 2020 via Android
    10
    我觉得协程的特性在这种客户端上没什么明显的优点
    youxiachai
    youxiachai
    Apr 22, 2020
    11
    因为...协程用起来太简单了..没啥值得说的...
    你说协程的原理....的话..又不局限与 kotlin....
    jinhan13789991
    jinhan13789991
    Apr 22, 2020
    12
    @binbinyouliiii 提升编程效率,简化代码结构。这还不算优点吗?
    gz911122
    gz911122
    Apr 22, 2020
    13
    @wysnylc

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

    但是客户端都是异步的,你觉得是协程的符合直觉还是 rx 符合直觉?
    zhouquanbest
    zhouquanbest
    Apr 22, 2020
    23
    百度输入法好像再用吧 量挺大
    我们生产环境不敢上,毕竟很多人线程都没搞明白,我们 apm 监控体系都没支持它,万一写坑了还不好找。
    现在像 gradle 插件啊 不影响运行时的地方 我们都开始用了
    binbinyouliiii
    binbinyouliiii
    Apr 22, 2020
    24
    @gz911122 #22 我不知道我们理解的是不是一样的,你说的都是异步是指操作类的异步吧,我说的异步是指充分利用 CPU 的这种异步,客户端按理说需要这种的场景比较少。
    gz911122
    gz911122
    Apr 22, 2020
    25
    @binbinyouliiii
    我说的就是通常的异步啊.

    点击按钮,发起请求,显示结果.
    这不是一个典型的异步场景吗?
    说确切点,移动端上除了 ui 操作,都需要异步啊.

    没明白你说的什么意思,也没太懂为啥移动端上要充分利用 cpu,拿用户手机挖矿吗?
    gz911122
    gz911122
    Apr 22, 2020
    26
    @binbinyouliiii 你给我造成的感觉是,你是做 java 后端的,对 android 开发并不熟悉. 你讲的仿佛是并发而不是移动端上通常所说的异步.
    WebKit
    WebKit
    Apr 22, 2020 via Android
    27
    已经在用了。是很方便
    WanzizZ
    WanzizZ
    Apr 22, 2020
    28
    哈哈 今晚和明晚扔物线有个课程专门讲 kotlin 协程的,两分钱,可以白嫖看看 https://ke.qq.com/course/2204707?tuin=9c77727#term_id=102307391
    hantsy
    hantsy
    Apr 22, 2020
    29
    Google 官方都有视频 Kotlin 系列教程,包括 Kotlin coroutines 在 Android 上应用,(我虽然不做 Android )
    AliMaster
    AliMaster
    Apr 22, 2020
    30
    kotlin 协程在安卓上是用线程池实现的一套线程池框架,不愿意翻源码可以看看扔物线朱凯的视频和文章 https://kaixue.io/tag/kotlin-coroutines/
    Vedar
    Vedar
    Apr 22, 2020
    31
    koltin 的就是真正协程 和 python js 的一样,倒是 go 的不能叫协程 不是一个东西
    hlayk
    hlayk
    Apr 22, 2020
    32
    多尝试 你会喜欢上的
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   3959 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 63ms · UTC 09:49 · PVG 17:49 · LAX 01:49 · JFK 04:49
    ♥ Do have faith in what you're doing.