V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
CodingPuppy
V2EX  ›  Android

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

  •  
  •   CodingPuppy · Aug 14, 2016 · 13326 views
    This topic created in 3557 days ago, the information mentioned may be changed or developed.

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

    昨晚的求助贴

    解决过程

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