Я работаю над визуализацией пользовательского представления (heavy operation as it has deep hierarchy and many child view's
) в представлении Recycler.
Из-за чего RecyclerView запаздывал, когда я выполняю быструю прокрутку. Даже после многих попыток оптимизации в качестве блока рендеринга UI (основного) потока.
Таким образом, чтобы решить эту проблему, я попытался создать растровое изображение из представления (впервые и кэшировал его) и отобразить его в RecyclerView (используя ImageView).
Теперь, когда все представления кэшированы как растровые изображения, прокрутка плавная.
Проблема:
Из-за создания BitMap я получаю OOM (Out of Memory) Crash.
java.lang.OutOfMemoryError: Не удалось выделить 2073612 байт
распределение с 891786 свободных байтов и 870KB до OOM в
dalvik.system.VMRuntime.newNonMovableArray (собственный метод) в
android.graphics.Bitmap.nativeCreate (собственный метод) в
android.graphics.Bitmap.createBitmap (Bitmap.java:946) в
android.graphics.Bitmap.createBitmap (Bitmap.java:917) в
android.graphics.Bitmap.createBitmap (Bitmap.java:884)
Я хочу проанализировать, какой путь лучше?
- Использование Coroutine для рендеринга View непосредственно в RecyclerView и UnBlock Main Thread.У вас возникнут какие-либо проблемы, такие как OOM?
- Использование растрового изображения как есть. Но OOM непредсказуемо, так как создание растрового изображения - тяжелая операция
Нужна помощь:
- каков наилучший подход?
- Если я переусердствовал и пропустил решение?