Освобождение ресурсов GC при работе приложения
Добавлено: 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 тоже будут уничтожаться?
Почему такое разное поведение во вроде бы похожих ситуациях?
При старте приложения создается объект 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 тоже будут уничтожаться?
Почему такое разное поведение во вроде бы похожих ситуациях?