Ответ
Да, приходилось. Основные методы:
- Использование
WeakReferenceдля кеширования, чтобы GC мог очистить объекты при нехватке памяти.
WeakReference<Bitmap> weakBitmap = new WeakReference<>(bitmap);
-
Оптимизация Bitmap через
inSampleSize,BitmapFactory.Optionsи библиотеки типа Glide/Picasso. -
Анализ утечек памяти через LeakCanary и Android Profiler.
-
Очистка ресурсов в
onDestroy()/onStop(), отмена подписок (RxJava/Coroutines). -
Использование
ArrayMap/SparseArrayвместо HashMap для примитивных ключей.
Пример:
val sparseArray = SparseArray<String>().apply {
put(1, "value") // Экономит память vs HashMap<Int, String>
}
Также важно избегать статических контекстов и больших объектов в Application.