2016-06-18 31 views
0

我有3個問題內存管理問題的android

  1. 多少它影響Android的記憶,當我們調用recyclerview.setadapter(新適配器);而不是 notifydatasetchanged();

  2. 在Android上使用Facebook應用程序時,我明白如果我們向下滾動一整天,Facebook的新聞提要不會結束。 但Facebook並沒有立即加載所有的新聞提要。當我們向下滾動時,它會一點一點地加載。所以我的問題是,我有 做了一個應用程序,其中我加載用戶在我的 recyclerview中詢問的問題。但隨着時間的推移,問題的數量增加,我仍然顯示所有的問題,其中 收費的設備的內存和應用程序開始崩潰,所以我如何 加載一些問題和用戶卷軸下 。我加載下面的問題就像facebook一樣 ?

  3. 與第二個問題類似。我如何只加載我一次在屏幕上顯示的問題?

PS我不包括代碼,因爲我覺得就沒有必要,因爲我什麼也沒有做太大的不同比普通recyclerview

回答

1

RecyclerView設置新的適配器之間的區別只需撥打電話notifyDataSetChanged()即可,因爲當您調用設置新的適配器時,應用程序將不得不重新創建其所有視圖持有者,並重新綁定所需的視圖持有者。 RecyclerView可能只是做到了這一點,並且做好工作是不必要和任務的。特別是如果每​​次你收到新的數據時都會調用它,這對你的android應用程序來說將會有很多工作。 RecyclerView的美麗在於它的名字。它通過在屏幕上滾動屏幕時重新使用(或循環)視圖來減少應用程序的過載量。即使您有10000個複雜的視圖,由於RecyclerView的實施,該應用程序仍可以很好地工作。所有的觀點永遠不會記憶。

對於第二個問題,您可以檢查RecyclerView中的位置是否真的可見。如果您檢查數據集中最後一項是否可見,那麼您可以發送網絡請求以獲取更多數據。 Facebook的方式可能做到這一點。像Quora和Tumblr這樣的其他網站也會這樣做,當您到達Feed的底部時,它通常會重新加載並將新數據添加到數據集中。如果你想獲得更好的體驗,你可以將閾值提高到最後一個視圖,但在這之前有一些視圖,所以它永遠不會像停止和重新加載。它可以創建無盡的滾動效果。實施取決於您,無論哪種方式,您可能都需要檢查RecyclerView的滾動狀態,並且絕對要撥打notifyDataSetChanged()或者更好的變體。

最後一個問題可能已由RecyclerView照顧。這取決於你的數據,但ViewHolders應該以一種你沒有多少內存的方式回收。

+0

謝謝你的答案。不是100%滿意:但好的回答:)。如果我沒有得到更好的答案,我可能會標記你的預期,也許:) –

+0

和順便說一句,當我使用notifydatasetchanged而不是新的適配器內存增加不是很多,爲什麼? –

+0

@SyedMuhammadOan它取決於你有多少數據。我正在考慮使用大量數據的複雜視圖範圍(例如包含圖像的數據和大量文本以及RecyclerView必須處理的許多不同組件)。總的來說,調用新的適配器在'notifydatasethchanged()'時似乎效率低下。根據您的觀點和數據,這可能不會是一個巨大的增加,但即使是輕微的損害您的應用程序。一個設備的內存容量可以是2GB或者小於1GB。無論哪種方式,大量的資源去Android資源和屏幕留下你的應用程序 –