Android, я вижу, что куча растет, но я хочу, чтобы это остановить - PullRequest
3 голосов
/ 05 декабря 2011

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

Grow heap (frag case)

видно по всем журналам

на моем телефоне произойдет сбой приложения на 32 МБ. Другие телефоны, конечно, будут 16 Мб, если есть какие-либо с таким количеством ресурсов, которые работают на Android 2.2

Теперь я использую recycle() в своих растровых изображениях, устанавливаю нулевые значения, извлекаю элементы из сложных структур данных и использую System.gc() для вызова сборки мусора во всем приложении

но, куча все еще растет, и это проблема ... в конечном итоге

Как заставить приложение сбросить ресурсы, чтобы оно продолжало функционировать.

обычно это всегда превышение «bitmap vm budget», но я все больше чувствую, что у меня просто нет доступа к команде «clear bitmap vm»

1 Ответ

16 голосов
/ 05 декабря 2011

Я также много боролся с этой проблемой.Есть много вещей, которые вы можете сделать.

  1. Вы можете вызвать recycle для каждого растрового изображения и установить для них значение NULL (bitmap.recycle() с учетом всей памяти, используемой этим растровым изображением, но не отменяет растровое изображение объекта).

  2. Вы также можете отсоединить drawables, связанный с макетами, как указано в этой ссылке .

  3. вы можете конвертировать hashmaps в WeakHashmaps.так что его память будет восстановлена, когда системе не хватит памяти.

  4. Вы можете изменить размер всех ваших растровых изображений.посмотрите на эти чернила l . .

  5. вы можете переопределить метод onLowMemory() в деятельности, которая получает вызов, когда во всей системе заканчивается память.вы можете высвободить там немного ресурсов.

  6. вы можете сделать ваши объекты SoftReference или Weakreference, чтобы они освобождались в условиях нехватки памяти.

Но реальный факт заключается в том, что все это может ЗАДЕРЖАТЬ вашу проблему / сбой из-за нехватки памяти, но не может устранить ее, потому что дело в том, что вы, должно быть, где-то пропускаете свой контекст активности или память.

...