КОРРУПЦИЯ ПАМЯТИ КАРТЫ В dlmalloc или dlfree и ошибки SIGSEGV в Android ICS 4.0 - PullRequest
12 голосов
/ 08 декабря 2011

Так как я не мог найти никого, кто бы сообщал об этом поведении, прежде чем я подумал о том, чтобы опубликовать проблему и свое решение здесь, чтобы это могло помочь другим, у кого возникла эта проблема.Наше приложение отлично работало на устройствах до ICS.Мы протестировали наше приложение на Galaxy Nexus и эмуляторе ICS и увидели странные сбои процессов следующего вида:

КОРРУПЦИЯ ПАМЯТИ КАРТЫ В dlmalloc

КОРРУПЦИЯ ПАМЯТИ КАРТЫ В dlfree

сигнал 11 (SIGSEGV), ошибка addr deadbaad

Проблема заключается в том, что сбои происходили в собственном пространстве, поэтому не было никакого собственного написанного кода, который бы непосредственно воздействовал на него.Так как мы обрабатываем много изображений в списках, и система выделяет растровые изображения для тех, кому в голову пришла только плохая обработка растровых изображений.Мы следовали всем лучшим практикам в сети и даже помогли GC собрать ненужные ресурсы, позвонив по номеру bitmap.recycle().Так или иначе, по неизвестной причине приложение постоянно зависало на Android ICS 4.0.

Ответы [ 2 ]

23 голосов
/ 08 декабря 2011

После некоторого расследования я убрал звонок на recycle() и теперь все отлично работает.Кажется, что сборщик мусора в ICS уже правильно очищает растровые изображения.Наш вызов recycle() заставил систему попытаться освободить память в собственном пространстве, но память уже была очищена системой.Каким-то образом произошел плохой доступ к памяти и произошел сбой системы.Поэтому, если вы программируете для Android ICS 4.0 и у вас возникли эти проблемы, вы можете попробовать без явной переработки растровых изображений.

0 голосов
/ 03 марта 2012

Если вы компилируете свое приложение с использованием ICS, нет необходимости явно вызывать recycle, поскольку это приведет к ошибке сигнала 11 (SIGSEGV).

...