У меня проблема с сборщиком мусора для Android, и я надеялся, что кто-то может указать на то, что я могу здесь делать неправильно. В начале моей программы у меня много данных, которые генерируются и добавляются в 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 - мой класс, который просто хранит данные, вроде старой структуры Си. Я знаю, что жую огромное количество памяти во время этой операции. Однако, когда он завершает работу, сборщик мусора (как показано в logCat) запускает и освобождает огромные объемы данных.
Итак, что происходит? Сборщик мусора недоволен тем, как я делаю вышеупомянутое утверждение, или он говорит мне, что убивает память из других приложений? Есть ли способ сказать? Есть ли лучший способ сделать то, что я делаю выше, который не использовал бы столько памяти? Должен ли я попробовать использовать базу данных SqlLite вместо того, чтобы делать это таким образом?
Я редко получаю сообщения от моих пользователей о том, что у них возникла проблема с памятью, но они возникают. Преимущественно, когда они по какой-либо причине покидают приложение, а затем возвращаются к нему; данные в массиве исчезают. Я просто пытаюсь понять, как я должен делать это в случае, если я делаю это неправильно. Любое понимание будет с благодарностью!