BitmapFactory.Options.inBitmap вызывает разрыв при частом переключении растрового изображения ImageView

Мы столкнулись с ситуацией, когда мне нужно отображать изображения в слайд-шоу, которое очень быстро переключает изображение. Большое количество изображений заставляет меня сохранять данные JPEG в памяти и декодировать их, когда я хочу их отобразить. Чтобы облегчить сборщик мусора, ям используюBitmapFactory.Options.inBitmap повторно использовать растровые изображения.

К сожалению, это вызывает довольно серьезные разрывы, яМы пробовали разные решения, такие как синхронизация, семафоры, чередование 2-3 битовых карт, но, похоже, ни одно из них не решило проблему.

мы создали пример проекта, который демонстрирует эту проблему на GitHub;https://github.com/Berglund/android-tearing-exampleI»

у нас есть поток, который декодирует растровое изображение, устанавливает его в потоке пользовательского интерфейса и спит в течение 5 мс:

Runnable runnable = new Runnable() {
@Override
public void run() {
        while(true) {
            BitmapFactory.Options options = new BitmapFactory.Options();
            options.inSampleSize = 1;

            if(bitmap != null) {
                options.inBitmap = bitmap;
            }

            bitmap = BitmapFactory.decodeResource(getResources(), images.get(position), options);

            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    imageView.setImageBitmap(bitmap);
                }
            });

            try {
                Thread.sleep(5);
            } catch (InterruptedException e) {}

            position++;
            if(position >= images.size())
                position = 0;
        }
    }
};
Thread t = new Thread(runnable);
t.start();

Моя идея состоит в том, что ImageView.setImageBitmap (Bitmap) рисует растровое изображение на следующем vsync, однако мыВозможно, мы уже декодируем следующий битовый массив, когда это произойдет, и поэтому мыМы начали изменять растровые пиксели. Думаю ли я в правильном направлении?

Кто-нибудь получил какие-либо советы о том, куда идти отсюда?

Ответы на вопрос(4)

Ваш ответ на вопрос