Сбой программы Android при случайной ошибке (вызванной java.lang.OutOfMemoryError) - PullRequest
0 голосов
/ 14 декабря 2011

Моя программа работает очень хорошо, и тогда я всегда сталкиваюсь со случайной ошибкой сбоя (например, ошибка надувания класса), которая почти всегда запускается с помощью OutOfMemoryError.

Я наблюдал за своей кучей виртуальных машин в DDMS, и она выглядитgc выполняет свою работу, так как я буду наблюдать, как %used поднимается и опускается вместе с #Objects

. Я заметил, что получаю сбой, когда у меня есть близкие к этим показателям:

Heap Size    11.820 MB
Allocated    7.020 MB
Free         4.801 MB
% Used       59.39%
# Objects    148,927

Это примерно пик использования устройства.Иногда здесь происходит сбой, но иногда это позволяет мне перейти к другой категории, которая позволяет GC выполнять свою работу, снижая %used до 32%.Тем не менее, я обычно вылетаю вскоре после того, как использование не работает.

Я обычно выхожу из строя с цепочкой ошибок.Самая верхняя ошибка Caused by: обычно имеет вид Caused by: java.lang.OutOfMemoryError: bitmap size exceeds VM budget

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

** РЕДАКТИРОВАТЬ **

Kindle Fire на Android 2.3.4 через Eclipse

1 Ответ

2 голосов
/ 14 декабря 2011

В до-сотовых версиях Android хранилища растровых данных увеличивают размер кучи виртуальных машин, поэтому невозможно отслеживать растровые данные через DDMS :) Есть две возможные причины: 1. Ваш интерфейс использует огромное количество изображений 2. Вы создаете растровые изображения вручную, и происходит утечка памяти. В одной из презентаций Google IO было сказано, что несколько сборок мусора необходимы для полного освобождения растровой памяти


Извините, пропустил, что приложение упало без изображений. Периодически попробуйте dump использование памяти и посмотрите это позже с помощью Eclipse Memory Analyzer

...