V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
CodingPuppy
V2EX  ›  Android

昨晚问了一个 Rxjava 和 Retrofit 的问题,可能是因为半夜发帖,没一个人理我。刚才搞定了,把过程分享一下

  •  
  •   CodingPuppy · 2016-08-14 02:18:01 +08:00 · 9510 次点击
    这是一个创建于 3048 天前的主题,其中的信息可能已经有所发展或是发生改变。

    问题是 Retrofit 配合 Rxjava 使用时,第一次调用网络请求,主线程耗时长达 2-3 秒,后续的请求这块耗时就没了,正常了。

    昨晚的求助贴

    解决过程

    6 条回复    2016-08-15 19:11:59 +08:00
    arrow2015
        1
    arrow2015  
       2016-08-14 08:18:54 +08:00 via Android
    trace 图要怎么看?看不懂
    CodingPuppy
        2
    CodingPuppy  
    OP
       2016-08-14 09:18:10 +08:00 via Android
    @arrow2015 看各个方法的 cpu 耗时,看各个进程负载, google 下吧
    jinhan13789991
        3
    jinhan13789991  
       2016-08-15 09:55:46 +08:00
    我猜是对 Retrofit 和 api 接口还有各种需要配置的初始化占用时间
    jinhan13789991
        4
    jinhan13789991  
       2016-08-15 09:59:15 +08:00
    看了下你的文章,我觉得你在 app 启动的时候调用一个空的接口,然后就没这个问题了
    CodingPuppy
        5
    CodingPuppy  
    OP
       2016-08-15 10:11:53 +08:00
    @jinhan13789991
    怀疑是 Retrofit 把一些初始化操作放到 Observer 创建之前了。
    在 app 启动的时候调用接口,没有解决基本问题,而且把 app 启动时间延长了。
    lowworker
        6
    lowworker  
       2016-08-15 19:11:59 +08:00   ❤️ 1
    刚好 watch 了 retrofit ,看到楼主的 issue , retrofit 的 CallAdapter 接管的只是网络请求的进程处理,像是 converter 的初始化的确是在调用的进程进行的,所以 @artem-zinnatullin 回答里提到的 fromCallable 再 flatmap 实际上也是把调用也放到 subscribeOn 里处理了。照理说 converter 的初始化这些是不会耗时这么久的,楼主最好把完整的 trace 也贴到 issue 上看看。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2852 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 14:55 · PVG 22:55 · LAX 06:55 · JFK 09:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.