Какой путь обеспечивает лучшую производительность BitMap или View? - PullRequest
0 голосов
/ 13 мая 2019

Я работаю над визуализацией пользовательского представления (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)

Я хочу проанализировать, какой путь лучше?

  1. Использование Coroutine для рендеринга View непосредственно в RecyclerView и UnBlock Main Thread.У вас возникнут какие-либо проблемы, такие как OOM?
  2. Использование растрового изображения как есть. Но OOM непредсказуемо, так как создание растрового изображения - тяжелая операция

Нужна помощь:

  • каков наилучший подход?
  • Если я переусердствовал и пропустил решение?
...