2017-02-27 59 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()方法,該方法將重新使用現有的連接池。