BitmapFactory.Options.inBitmap provoca el desgarro al cambiar el mapa de bits de ImageView a menudo

Me he encontrado con una situación en la que tengo que mostrar imágenes en una presentación que cambia de imagen muy rápido. La gran cantidad de imágenes hace que quiera almacenar los datos JPEG en la memoria y decodificarlos cuando quiero mostrarlos. Para facilitar en el recolector de basura, estoy usandoBitmapFactory.Options.inBitmap para reutilizar bitmaps.

Desafortunadamente, esto causa un desgarro bastante severo, he intentado diferentes soluciones como la sincronización, los semáforos, alternando entre 2-3 mapas de bits, sin embargo, ninguno parece solucionar el problema.

He configurado un proyecto de ejemplo que demuestra este problema en GitHub;https://github.com/Berglund/android-tearing-example

Tengo un hilo que decodifica el mapa de bits, lo establece en el hilo de la interfaz de usuario y duerme durante 5 ms:

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();

Mi idea es que ImageView.setImageBitmap (mapa de bits) dibuja el mapa de bits en el siguiente vsync, sin embargo, es probable que ya estemos decodificando el siguiente mapa de bits cuando esto ocurra, y como tal, hemos comenzado a modificar los píxeles del mapa de bits. ¿Estoy pensando en la dirección correcta?

¿Alguien tiene algún consejo sobre dónde ir desde aquí?

Respuestas a la pregunta(2)

Su respuesta a la pregunta