有人用 kotlin 协程特性写 android 应用么? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
请不要在回答技术问题时复制粘贴 AI 生成的内容
fyooo

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

  •  
  •   fyooo Apr 22, 2020 5306 views
    This topic created in 2205 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
    Lin0936
        1
    Lin0936  
       Apr 22, 2020   1
    kotlin 协程是靠编译实现的, Android API 版本没有限制.
    正在用 Kotlin + Jetpack 全套弄一个 APP, 坑也多, 不过写起来确实很爽
    fyooo
        2
    fyooo  
    OP
       Apr 22, 2020
    @Lin0936 已发送感谢,谢谢指点
    Tolcol
        3
    Tolcol  
       Apr 22, 2020
    写起来很爽,正在用,主要是觉得 RxJava 包太大了,用的地方也不是很多,可以节约 2M+的包大小
    gz911122
        4
    gz911122  
       Apr 22, 2020
    怎么听得不多..
    现在不都在用么?
    yumerdev93
        5
    yumerdev93  
       Apr 22, 2020
    以前刚接触 rxjava,惊叹「哇,还可以这样」,现在用了协程后觉得 rxjava 繁琐死了,不会再使用,现在项目依赖已经没有 rxjava 了。
    jinhan13789991
        6
    jinhan13789991  
       Apr 22, 2020
    已经在用了

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

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

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

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

    没明白你说的什么意思,也没太懂为啥移动端上要充分利用 cpu,拿用户手机挖矿吗?
    gz911122
        26
    gz911122  
       Apr 22, 2020
    @binbinyouliiii 你给我造成的感觉是,你是做 java 后端的,对 android 开发并不熟悉. 你讲的仿佛是并发而不是移动端上通常所说的异步.
    WebKit
        27
    WebKit  
       Apr 22, 2020 via Android
    已经在用了。是很方便
    WanzizZ
        28
    WanzizZ  
       Apr 22, 2020
    哈哈 今晚和明晚扔物线有个课程专门讲 kotlin 协程的,两分钱,可以白嫖看看 https://ke.qq.com/course/2204707?tuin=9c77727#term_id=102307391
    hantsy
        29
    hantsy  
       Apr 22, 2020
    Google 官方都有视频 Kotlin 系列教程,包括 Kotlin coroutines 在 Android 上应用,(我虽然不做 Android )
    AliMaster
        30
    AliMaster  
       Apr 22, 2020
    kotlin 协程在安卓上是用线程池实现的一套线程池框架,不愿意翻源码可以看看扔物线朱凯的视频和文章 https://kaixue.io/tag/kotlin-coroutines/
    Vedar
        31
    Vedar  
       Apr 22, 2020
    koltin 的就是真正协程 和 python js 的一样,倒是 go 的不能叫协程 不是一个东西
    hlayk
        32
    hlayk  
       Apr 22, 2020
    多尝试 你会喜欢上的
    About     Help     Advertise     Blog     API     FAQ     Solana     3216 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 74ms UTC 13:13 PVG 21:13 LAX 06:13 JFK 09:13
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86