我遇到了Android垃圾收集器的問題,並希望有人能指出我在這裏可能做錯了什麼。在我的程序開始時,我有很多數據被生成並拋入ArrayList。我在下面做的例子...Android垃圾收集器和ArrayLists
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數據庫而不是這樣做嗎?
我很少從我的用戶那裏得到他們已經遇到內存問題的報告,但他們正在發生。主要是當他們由於某種原因離開應用程序後回到它;數組中的數據消失。我只是想弄清楚我應該怎麼做這樣做是爲了防止我做錯了。任何有識之士將不勝感激!
我沒有看到這個問題...你有沒有例外?您的陣列意外清除了嗎? – 2011-05-19 11:45:29
我在我身邊很少遇到異常情況,但對於最終用戶我不能這麼說。最主要的問題似乎是數組被填充,用戶徘徊在我的應用程序之外做其他事情,然後回到它並且數組中的一些數據不再存在。我剛剛設置的值可能會在5-10秒後消失在一些非常奇怪的情況下。 GC是我能看到的唯一可以做到的事情,並且試圖圍繞它來減少內存開銷並阻止它發生(希望是......)。 – AzHole 2011-05-19 20:50:44
數組本身存儲在哪裏?也許在某種對內存敏感的緩存中? – 2011-05-19 21:11:13