Подтвердить что ты не робот

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

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

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

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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