Retrofit 2使用太多线程

时间:2017-02-27 11:15:23

标签: java android retrofit

我在Android应用程序中使用Retrofit 2,我有很多网络电话。 我遇到了性能问题,经过长时间的研究,我发现我的应用程序中运行的线程太多了。 我打印了应用程序中的所有活动线程,并看到一个具有太多实例(几百个)的特定线程,名称为“OkHttp ConnectionPool” - 我假设它已连接到我的改装调用。

有没有办法防止这个线程泛滥系统?

2 个答案:

答案 0 :(得分:1)

恕我直言,在这种情况下,与Retrofit一起使用依赖注入框架符合您的最佳利益。就像你说改造连接相当昂贵。我不是一个给你很多建议的专家,但是如果你看一下这样的教程retrofit2 combined with dagger2,它会非常有用。我一直在进行改造,遇到了你提到的问题,这是因为连接池没有优化。 只是为了概述依赖注入将会做什么只是让你在整个应用程序中保留一个改造实例,你需要做的就是在需要实例的任何地方注入它。 Dagger2是我所知道的最好的工作,到目前为止你可以在Dagger By Google

查看它

您还可以选择将改装用作单身人士。请再次阅读,因为这是一个有用的设计模式。对于你而言,单身人士在实施方面也会更容易,但就应用范围而言,DI将长期帮助你。对于单身人士,请查看此Stackoverflow.com answer

如果我错了,请再次纠正我,因为我也在学习过程中:)。干杯

答案 1 :(得分:0)

你可以发布你的代码吗?您是否正在创建OkHttpClient的多个实例?每个实例都会带来一个新的连接池,所以如果你在应用程序的生命周期中有很多这样的连接池,它就会被淹没。

您需要将OkHttpClient实例化为单身人士。有关详细信息,请参阅OkHttp源代码中的this comment

如果您需要修改OkHttpClient以使其具有不同的配置,则可以使用newBuilder()方法,该方法将重用现有连接池。