Приложению Android не хватает памяти - все перепробовал, но все равно в растерянностиAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Приложению Android не хватает памяти - все перепробовал, но все равно в растерянности

Сообщение Anonymous »

Я потратил 4 полных дня, пытаясь сделать все возможное, чтобы выяснить утечку памяти в приложении, которое я разрабатываю, но все давно перестало иметь смысл.

Приложение, которое я разрабатываю, носит социальный характер, поэтому подумайте о профиле «Действия» (P) и перечислите действия с данными — например, значки (B). Вы можете переходить от профиля к списку значков, к другим профилям, к другим спискам и т. д.

Представьте себе такой поток: P1 -> B1 -> P2 -> B2 -> P3 -> B3 и т. д. Для единообразия я загружаю профили и значки одного и того же пользователя, поэтому каждая страница P одинакова, как и каждая страница B.

Общая суть Проблема в том, что после небольшой навигации, в зависимости от размера каждой страницы, я получаю исключение нехватки памяти в случайных местах - растровые изображения, строки и т. д. - оно кажется непоследовательным.

Сделав все возможное, чтобы выяснить, почему мне не хватает памяти, я ничего не придумал. Чего я не понимаю, так это почему Android не убивает P1, B1 и т. д., если при загрузке у него заканчивается память и вместо этого происходит сбой. Я бы ожидал, что эти более ранние действия умрут и возродятся, если я когда-нибудь вернусь к ним через onCreate() и onRestoreInstanceState().

Не говоря уже об этом - даже если я выполню P1 -> B1 -> Назад -> B1 -> Назад -> B1, у меня все равно произойдет сбой. Это указывает на какую-то утечку памяти, но даже после дампа hprof и использования MAT и JProfiler я не могу ее точно определить.

Я отключил загрузку изображений из Интернета (и увеличил загружаемые тестовые данные, чтобы компенсировать это и сделать тест честным) и убедился, что кеш изображений использует SoftReferences. Android фактически пытается освободить несколько имеющихся у него SoftReferences, но прямо перед тем, как он выходит из памяти.

Страницы значков получают данные из Интернета, загружают их в массив EntityData из BaseAdapter и передают их в ListView (на самом деле я использую отличный MergeAdapter от CommonsWare, но в этом действии со значками в любом случае есть только один адаптер, но я хотел бы упомянуть об этом в любом случае факт).

Я просмотрел код и не смог найти ничего, что могло бы привести к утечке. Я очистил и обнулил все, что смог найти, и даже System.gc() слева и справа, но приложение все равно вылетает.

Я до сих пор не понимаю, почему неактивные действия, находящиеся в стеке, не извлекаются, и мне бы очень хотелось это выяснить.

На данный момент я ищу любые подсказки, советы, решения... все, что может Помогите.

Спасибо.

Подробнее здесь: https://stackoverflow.com/questions/753 ... -at-a-loss
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»