簡體   English   中英

Android垃圾收集器和ArrayLists

[英]Android Garbage Collector and ArrayLists

我在使用Android Garbage Collector時遇到問題,希望有人可以指出我在這里做錯了什么。 我的程序開始時有很多數據,這些數據已生成並扔到ArrayList中。 我在下面做的事的例子...

m_aUnitsPhysical.add(new UnitData("P01", 1, 0, 0, false, false, 300, UnitType.PHYSICAL, 1, "Unit Name"));

在我的類構造函數中,大約有236條這樣的語句。 該數組定義為:

private ArrayList<UnitData> m_aUnitsPhysical;   // Physical array listing

如果有幫助,則類構造函數為...

public UnitData(String p_szID, int p_iAtk, int p_iDef, int p_iUp, boolean p_bLoot, boolean p_bHonor, int p_iCost, UnitType p_Type, int p_iLevel, String p_szName)

UnitData是我的一類,僅存儲數據,有點像舊的C結構。 我知道我在此操作過程中消耗了大量內存。 但是,完成后,垃圾收集器(如logCat中所示)啟動並釋放大量數據。

發生什么了? 垃圾收集器是否對我執行上述聲明的方式感到生氣,還是告訴我正在殺死其他應用程序的內存? 有什么辦法說嗎? 有沒有一種更好的方式可以完成我上面所做的事情,而不會占用太多內存? 我應該嘗試使用SqlLite數據庫而不是這樣做嗎?

我很少收到用戶的報告,說他們遇到了內存問題,但是這種情況正在發生。 主要是當他們出於某種原因離開應用程序然后又返回到該應用程序時; 數組中的數據消失。 我只是想弄清楚如果我做錯了應該怎么做。 任何見解將不勝感激!

如果您附帶的應用程序帶有一組靜態數據(聽起來確實如此),那么您可能希望將數據集包含在預制數據庫中。 這是有關如何做到這一點的出色教程

也就是說,200條記錄不應引起任何內存問題。 如果在用戶重新打開您的應用幾次后出現問題,請確保您沒有不必要地重新加載任何數據; 在再次加載之前,請檢查數組是否已被填充。

使用數據庫處理大量數據。 這是最好的建議方式。

對於當前設置,請嘗試創建較少的對象。 嘗試使用單個對象執行此操作,然后替換其數據並將其添加到列表中。.不知道這是否會提高性能,但我相信應該。 構造函數很昂貴。

即使內存用完,GC也永遠不會刪除強引用的對象(即未通過WeakReference等引用的對象)(在這種情況下,它將拋出OutOfMemoryError )。

您的問題必須在其他地方。

(其他張貼者建議使用數據庫來存儲您的值,但是對於僅200個項目,我認為您的方法沒有問題-除非這些對象非常復雜/巨大)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM