Sí, queda claro. Deberías tener un 'pool' de imágenes, por ejemplo en un 'Map', donde la 'key' sea el índice y el 'Value' el bitmap. Suponemos que el máximo que quieres tener en memoria son 500
Al principio cargas 50. Cuando el usuario llega al final del scroll, cargas 50 más. Si el usuario sigue haciendo scroll, cargas 50 más y así todo el rato.... hasta aquí correcto.
Ahora bien: si has llegado a cargar 500, o el máximo que tengas establecido, y el usuario sigue haciendo scroll, necesitarás 50 más. Pero como no puedes tener más de 500 en memoria, necesitarás eliminar algunas. Estas deben ser las más "antiguas", o las que estén a mayor distancia de tu índice de scroll actual.
Cómo hacerlo: Por un lado tienes un 'Map'. Por otro lado (por comodidad) puedes guardar el índice mínimo y máximo de los bitmaps que en teoría están pedidos.
Así, cada vez que necesites llenar una casilla de tu scroll, vas a buscar si está en tu map (utilizas el índice como 'key').
- Si el índice está entre el mínimo y el máximo, y
- SÍ está en el map --> obtenemos el bitmap y ya está
- NO está en el map --> significa que está 'pedido' pero todavía no ha llegado. Aquí sería necesaria una gestión por tiempo o reintento.
- Si el índice NO està entre el mínimo y el máximo y
- El Map todavía no está 'lleno' : Suponemos que tenemos del 0 al 249 y queremos llenar el 250. Como está fuera de límites significa que no lo hemos pedido todavía. Lanzamos la descarga de 50 más, y aumentamos el máximo en 50 unidades
- El Map ya está 'lleno' : suponemos que tenemos minimo = 100 y máximo = 599 y queremos el índice 99. Esto significa que estamos haciendo scroll hacia las primeras posiciones de la lista después de haber bajado mucho. Ahora los 50 más antiguos serán del 550 al 599. Los eliminamos del map, y pedimos del 50 al 99. También cambiamos el valor del mínimo para reflejarlo.
Quizás haya suerte y ya exista alguna código por el foro que haga esta gestión. Pero tampoco es nada complejo y, bien implementado, hará lo que necesitas.