2016-06-10 22 views
0

我已經通過RecyclerView創建了超過2000個項目的列表。 RecyclerView將回收控件,但分配的列表中有超過2000個對象。列表甚至可能有4000個對象。如果適配器有超過2000個對象,RecyclerView的性能

將列表中的所有對象放在內存中還是有其他管理方法是一個好主意?

現在,如果我執行無限滾動或顯示加載器加載數據,它將被添加到列表和notifyDataSetChanged();將被調用。但是,保持超過2000個對象的列表的問題仍然是一樣的。

爲此場景建議更好的方法。

+0

苦的做法將是無盡的滾動或顯示LADER加載數據 –

+0

這取決於你有什麼類型的數據 - 如果它只是文字,那就沒問題。 – JonasCz

+0

@JonasCz - 每個對象都有4-5個字符串對象。這種類型的4000個對象不會引起任何內存問題,只有關注。 –

回答

1

如果您最初有2000個項目,那麼無論如何RecyclerView會將它們保留在內存中,以便它可以加載它們。 但是,如果你從網絡獲取這些項目,那麼你說你可以實現無限滾動,從你的web服務加載項目根據需要,並將它們添加到你的列表。

+0

問題不是在內存中有超過2000個對象。即使從網絡獲取數據,對象也會添加到相同的列表中,最終增加列表的大小。 –

+0

是的,當你有更多的物品時,列表尺寸顯然會增加。如果你擔心列表是否可以有2000個項目,那麼它取決於你的記憶。在正常情況下,這不是一個擔心。但正如我所說,我強烈建議如果數據來自網絡服務器,然後獲取數據bcoz將有非常少的用戶將滾動2000個項目。 –

0

我目前正在經歷同樣的場景,但我的數據集是這樣大的它擁有目前國內2600項,但我已經準備好我的名單在其新增近10萬項,我處理這個問題的方法是:

我在res/raw中使用.json文件爲我的應用程序與項目和加載列表中的所有項目,好的。現在,而不是將此列表直接向所有項目直接發送到適配器,而是選擇另一個列表,在其中我將一點一點地添加項目,並使用加載更多機制填充RecyclerView。並且,當您在RV中加載完整項目時,只需清除先前提取的列表以清除內存。

很多人建議使用Web ServiceAPI因爲如果你的應用程序不斷地獲取數據是,海事組織,一個虛假的方式,假設有10,00,0000用戶,每次45萬用戶在線,他們都在做通過加載獲取更多它將對WebServer做什麼,最重要的是所有的請求最終都會從數據庫中獲取數據(如此多的命中到DB ......總是被認爲是最糟糕的方法),所以如果採用這種方式,你還需要照顧像實現中間件數據請求的API機制查找,以避免每次都向用戶請求數據庫,並且如果用戶的請求已經創建並且緩存在此層中,則從Web服務器層返回數據(絕對困難的任務,但這是它正在使用這些天)。

如果你(或任何人)發現更好的方法善意討論。希望我以某種方式幫助。

+0

原始文件夾中存儲json對象的第一件事是不可能的,因爲很少有人在應用程序使用增加時開始收集數據。但是,如果數據是靜態的,那麼我們可以保持原始數據。並且保留2列表僅僅是一個開銷,bcoz你會先在內存中創建大列表來做小列表,所以你將在內存中有2個列表。第二件事,說服abt服務器加載一個開發人員,如果有這麼多的用戶顯然不依賴於普通的服務器機器,他/她可能會有一個小型集羣。 –

+0

第一件事 - 是的,但他沒有告訴他的情況。 第二 - 保持兩個列表將是緊張的內存,只有當兩者都持久,我說清除第一個時候臨時列表填滿或另一種方法,同時列出父列表並將其添加到子列表當時清除該子列表家長。第三件事情,在羣集上維護數據並不是一件容易的事情。它需要對這些羣集進行適當的開發和組織,主要是哪些開發者只需購買一個域並在Web上部署他們的數據庫就可以了,就是這樣... –

0

如果對象太重/或者您從服務器獲取它,那麼最好管理虛擬分頁。讓我們定義你的頁面大小爲100,在onBind中檢查一下,如果它已經達到你列表的70%(顯示第70行),那麼它將打電話取得另一個100.

並且不用擔心RecyclerView/ListView,它們與列表大小沒有問題,因爲RecyclerView或ListView創建的最大行數是您可以在頁面上查看的最大行數,無論列表大小如何。

希望這將有助於.. :)

相關問題