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

2016-08-14 02:18:01 +08:00
 CodingPuppy

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

昨晚的求助贴

解决过程

8924 次点击
所在节点    Android
6 条回复
arrow2015
2016-08-14 08:18:54 +08:00
trace 图要怎么看?看不懂
CodingPuppy
2016-08-14 09:18:10 +08:00
@arrow2015 看各个方法的 cpu 耗时,看各个进程负载, google 下吧
jinhan13789991
2016-08-15 09:55:46 +08:00
我猜是对 Retrofit 和 api 接口还有各种需要配置的初始化占用时间
jinhan13789991
2016-08-15 09:59:15 +08:00
看了下你的文章,我觉得你在 app 启动的时候调用一个空的接口,然后就没这个问题了
CodingPuppy
2016-08-15 10:11:53 +08:00
@jinhan13789991
怀疑是 Retrofit 把一些初始化操作放到 Observer 创建之前了。
在 app 启动的时候调用接口,没有解决基本问题,而且把 app 启动时间延长了。
lowworker
2016-08-15 19:11:59 +08:00
刚好 watch 了 retrofit ,看到楼主的 issue , retrofit 的 CallAdapter 接管的只是网络请求的进程处理,像是 converter 的初始化的确是在调用的进程进行的,所以 @artem-zinnatullin 回答里提到的 fromCallable 再 flatmap 实际上也是把调用也放到 subscribeOn 里处理了。照理说 converter 的初始化这些是不会耗时这么久的,楼主最好把完整的 trace 也贴到 issue 上看看。

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

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

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

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

© 2021 V2EX