В настоящее время я работаю над встроенным устройством, использующим Android 2.3.3 с очень небольшим количеством памяти. GUI использует много растровых изображений, и иногда мы видели некоторые исключения OutOfMemory из-за того, что Android не обрабатывал битмап-память достаточно хорошо, чтобы освободить память достаточно быстро, чтобы начать новую работу.Эффективный способ очистки всех растровых изображений в Android 2.3.3
Чтобы быть точным, Android официальной документации (https://developer.android.com/training/displaying-bitmaps/manage-memory.html) говорит нам:
On Android 2.3.3 (API level 10) and lower, the backing pixel data for a bitmap is stored in native memory. It is separate from the bitmap itself, which is stored in the Dalvik heap. The pixel data in native memory is not released in a predictable manner, potentially causing an application to briefly exceed its memory limits and crash.
In Android 2.3.3 (API level 10) and lower, using recycle() is recommended. If you're displaying large amounts of bitmap data in your app, you're likely to run into OutOfMemoryError errors. The recycle() method allows an app to reclaim memory as soon as possible.
Caution: You should use recycle() only when you are sure that the bitmap is no longer being used. If you call recycle() and later attempt to draw the bitmap, you will get the error: "Canvas: trying to use a recycled bitmap".
Так я начал осуществлять некоторые рециркуляцию() в OnDestroy(), но я столкнулся различные вопросы:
- onDestroy() не является надежным, так как мы не можем быть уверены, что Android вызовет его до полного уничтожения приложения. Таким образом, даже если это кажется хорошим местом для очистки растровых изображений, может случиться так, что активность мгновенно убивается, а другая запускается и не может выделять память для собственных растровых изображений.
- Будет ли лучшее место для реализации переработки растровых изображений?
-Какие чертежи объявлены с помощью кода Java, которые легко утилизировать, поскольку мы можем хранить ссылки на них. Но как насчет объявленных через Xml?
- Есть ли способ найти все растровые изображения BitmapDrawable (без просмотра полного вида дерева)?
- Как Android управляет объявлением XML-объявления? Есть ли только один объект java object/xml? (это означает, что у вас могут быть некоторые проблемы, если ссылка на xml используется в нескольких представлениях/действиях). Наличие только одного экземпляра каждого объекта значительно уменьшит используемую память, но для правильной очистки потребуется гораздо больше логики.
Те конкретные вопросы ведут к главному вопросу: Как обрабатывать растровые изображения, чтобы убедиться, что перед другим OnCreate(), мы убирали каждый точечный рисунок предыдущей деятельности?
Спасибо!