Drawables изначально утечка памяти? - PullRequest
2 голосов
/ 23 октября 2011

Я читаю этот вопрос , потому что мне приходится загружать тонну загруженных ресурсов в приложение, которое я пишу, и мне было любопытно, насколько сильно это сказалось на производительности [по сравнению с наличие их в .apk] и «правильный» ответ на вопрос подразумевает, что, хотя при этом не происходит снижения производительности, вам придется беспокоиться об освобождении памяти, когда вы закончите с ней, чтобы она не просочилась.

Кто-нибудь может с уверенностью подтвердить или опровергнуть это? У меня сложилось впечатление, что загруженный Drawable был GCed точно так же, как и все остальное, когда Activity был очищен. Мне бы очень хотелось узнать, если это не так, и какой самый надежный способ вручную собрать память в указанном экземпляре.

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

1 Ответ

1 голос
/ 23 октября 2011

Быстрый ответ:

Для очистки растровых изображений требуется два прохода сборщика мусора. Первый проход освобождает объект Java, второй проходит данные нативного пикселя. Они не протекают, но вы можете исчерпать память между тем, когда вы обнулите указатели, и GC выполнит второй проход по ним. Это правда, независимо от того, из какого ресурса они поступают. Всегда полезно вызывать recycle () для битовой карты, когда вы уверены, что и вы, и система, покончили с ними. Gingerbread особенно плохо справляется с проблемами нехватки памяти и растровых изображений из-за ошибки в Dalvik VM.

По моему опыту, загрузка изображений из apk НАМНОГО быстрее, чем с SD-карты. 1) Они выровнены по zip в apk (если вы выровняете свой apk, что вам и нужно) 2) Разные телефоны имеют разное время доступа к SD-карте. Общее правило: если он на SD-карте, он будет загружаться медленно. Вы можете обойтись без загрузки загружаемых объектов из внутренней памяти в главном потоке (хотя это плохая идея). Вы не можете загрузить что-либо с SD-карты в главном потоке. Всегда: - \

На вашем месте я бы как можно более ленив при загрузке изображений, я бы держал их в apk, если это возможно.

...