КОРРУПЦИЯ ПАМЯТИ HEAP В ошибках dlmalloc или dlfree и SIGSEGV в Android ICS 4.0

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

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

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

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

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

Solutions Collecting From Web of "КОРРУПЦИЯ ПАМЯТИ HEAP В ошибках dlmalloc или dlfree и SIGSEGV в Android ICS 4.0"

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

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