Освобождение ресурсов GC при работе приложения

Activity Lifecycle, Saving Activity State, Managing Tasks, Intent, Intent Filter
Ответить
m.sergei4
Сообщения: 2
Зарегистрирован: 05 ноя 2014, 07:58

Освобождение ресурсов GC при работе приложения

Сообщение m.sergei4 » 05 ноя 2014, 08:41

Подскажите как победить проблему.

При старте приложения создается объект controller, который содержит несколько ArrayList - данные подгруженные из БД.
В приложении есть вызов стандартной галереи, для выбора картинки. При этом данные из ArrayList из controller могут быть уничтожены GC, если ресурсов не хватает.
Почему это происходит, если на все эти объекты есть действующая ссылка?

controller определен как static в Application приложения и инициируется в методе onCreate. В конструкторе controller создаются ArrayList.
пользователь добавляет по мере необходимости объекты в ArrayList.

При вызове GC объект controller остается жить, списки ArrayList тоже остаются, а вот значения в списках пропадают. Почему это происходит? По всем правилам объекты должны оставаться в памяти пока на них есть, хоть одна ссылка.

Заметил следующую особенность - если controller инициировать не в App.onCreate, а, к примеру, в первом Activity, то controller тоже будет уничтожен со всем содержимым при GC, хотя статическая ссылка будет присутствовать на него из App.

Если ArrayList инициировать не в конструкторе, а скажем в методе Init, который вызывается сразу же после инициализации, то ArrayList тоже будут уничтожаться?

Почему такое разное поведение во вроде бы похожих ситуациях?

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Освобождение ресурсов GC при работе приложения

Сообщение doter.ua » 05 ноя 2014, 10:11

Гугл мягкие и жесткие ссылки java
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

m.sergei4
Сообщения: 2
Зарегистрирован: 05 ноя 2014, 07:58

Re: Освобождение ресурсов GC при работе приложения

Сообщение m.sergei4 » 05 ноя 2014, 10:18

да уже обгуглился весь. пока не нашел решения.
т.е получается, что при создании в конструкторе создается жесткая ссылка, а при создании в методе мягкая и dalvik считает, что все ссылки на объект мягкие и освобождает память?

Ответить