Утечки растровой памяти

Итак, до появления соты объект Bitmap был просто указателем на собственное пространство динамической памяти (используя malloc), и я мог очистить эту собственную память, вызвав.recycle(); после сота память для растрового изображения выделяется в куче приложения, которая получает вызовы gc.

Мой вопрос: мое приложение должно поддерживать 2.2+, что мне делать? Проверить версию и позвонить в recyle? Не вызывать рециркуляцию вообще? Каков твой совет для этого. Потому что у меня есть BitmapCache, который содержит несколько экземпляров Bitmap, и я не хочу, чтобы они навсегда остались в памяти.

3 ответа

Решение

В любой версии для Android, будь то фройо, пряник или соты. Вы должны проверить себя для управления памятью. Да, начиная с версии 2.2+ вы можете настроить свое приложение с помощью sdcard, но сохранение растровых изображений в динамической памяти всегда создаст проблему для использования любой из этих версий. Если вы хотите использовать только растровые изображения, попробуйте эту ссылку. Они дали вам много способов эффективного управления растровыми изображениями. Перейдите по этой ссылке: Эффективное отображение растровых изображений

Как вы заметили на страницах разработчиков, они сказали, что слабые ссылки устарели. Проверьте все учебники по ссылкам на растровые изображения по ссылке, которую я оставил здесь, и попробуйте использовать уменьшение (когда это возможно), кэширование и AsyncTask, а также ленивую загрузку растровых изображений из этого примера...

Эти вещи вместе будут решением, я уверен,..

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

Надеюсь, это не слишком много ссылок, но когда мы его получим, это будет работать как шарм;)

ура

Во-первых, для любой версии платформы Android, например: Android 2.2 или Android 3.0 или выше, чем Android 3.0, растровое изображение, которое вы не хотите использовать, вам также нужно вызвать bitmap.recycle()

хотя android >=3.0 Сохранение растрового изображения в куче dalvik, а не сохранение в родной куче. так что, как кучи Java, если у вас есть ссылки для ссылки на объект, объект не может быть gc по системе, и растровая память может занять много памяти, если вы не убедитесь, что счетчик ссылок на объекты равен нулю, это будет большой проблемой.

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

Другие вопросы по тегам