2017-02-27 58 views
0

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

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

回答

1

恕我直言,在这种情况下,您最好利用与Retrofit一起使用依赖注入框架。像你说的改造连接是相当昂贵的。我不是专家给你很多建议,但如果你看看这样的教程,这真的会有所帮助,如retrofit2 combined with dagger2。我已经与翻新工作并遇到问题,这是因为连接池没有优化。 只是给你一个概述什么依赖注入将做什么只是让你保持在整个应用程序改造的单个实例,所有你需要做的就是注入它,无论你需要一个实例。 Dagger2是我注意到的目前为止做的最好的工作,你可以在Dagger By Google

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

如果我错了,请再纠正一下,因为我在学习过程中也是如此:)。欢呼声

+0

匕首要做什么工作?我也面临同样的问题,你能解释一下吗? –

+0

首先,我会建议阅读一些关于依赖注入的内容。它的作用是简化您的案例中不必要的改造实例创建。一旦你了解了DI(依赖注入),请阅读我上面提供的教程链接。如果你仔细阅读,它提供了一个使用匕首改装的简单例子 – imaadhrizni

+0

一旦你学习了基础知识,DI是非常简单和有用的。我建议你先做一些研究;)。 – imaadhrizni

0

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

你会想实例化OkHttpClient作为一个单身人士。有关更多信息,请参阅OkHttp源代码中的this comment

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