2016-11-16 57 views
0

我正在考慮使用無限列表(Recyclerview或Listview)以及由ArrayList提供的數據。 (Object-a model class)在無限的情況下內存處理的概念

所以對於無限列表,Arraylist的大小會增加,列表佔用的內存也會增加。那麼,應用程序將如何運作,它是否會創建內存不足異常或不會掛起。

我只是想知道對此有效的概念,如果它創建異常 - 讓我知道我們該如何處理它。

+1

準確地說,ArrayList無限意味着Integer.MAX_VALUE - 8 – Blackbelt

+0

如果你使用一個沒有限制的集合(參見Blackbeld評論),無限將始終引發一個'OutOfMemoryError',因爲內存是有限的。您需要清除一些未使用/看不見的值。 – AxelH

回答

0

您的應用程序很可能會拋出OOM異常,處理它的方法如下:

try { 
    // fill your infinite list as you want 
} catch (OutOfMemoryError E) { 
    //release some/all objects from your list, f.e., the first 100 ones or so 
} 

我希望它能幫助。

+0

這可能還不夠,因爲這可能會導致其他錯誤。 '錯誤'是不應該被捕獲的 – AxelH

+0

這是足夠的,相信我,它是很容易的嘗試,創建任何類型的ArrayList,並在一段時間內添加它的值(真) – kelmi92

+0

是的,在一個簡單的程序這個。由於共享內存,此應用的其他線程可能會受到影響。所以很多可能會崩潰。切勿嘗試從錯誤中恢復(某些情況除外)。 [一些閱讀](http://stackoverflow.com/a/8729011/4391450) – AxelH

0

在嘗試將其加載到回收站視圖中之前,檢查獲取的內存列表是否小於可用內存。因此,處理OutOfMemoryException的最有效方法是以這樣的方式構建您的應用程序,即它不會嘗試將大量數據加載到內存中以避免發生異常。

我不列出你正在使用的項目超過500或1000的項目,所以你不必擔心,因爲它會在你的內存緩存中。但是當您在回收站視圖中加載圖像時出現實際問題,並且您需要持續回收您的視圖。

此外,在應用程序類你正在回調,當你沒有足夠的內存

@Override 
public void onLowMemory() { 
    super.onLowMemory(); 
} 

請讓我知道,如果你還有什麼疑問。