Would I be right in thinking that your game only scrolls in one direction? I’m basing that on this:
No background is same and once a background is off screen it will never come again.
If that’s the case, you only need to load 2 images at a time: the current screen plus the next screen. That way even when the current image is halfway offscreen, the second image is halfway onscreen.
However this requires 2 full screen sized images to be loaded into memory. If you use torbenratzlaff’s suggestion and cut each image in half you could get away with having 3 “half screen” sized images loaded into memory at once instead.
You would load 2 half sized images which make up the current screen, plus another half sized image for the upcoming screen half.
This alone would cut down the texture memory being used by 25% which is a pretty good saving.
Not sure if this example of how the images would be “chained” will be clear or not once I post it:
[curr1][curr2][next1] [devicescreen]
It means loading more individual images, but less texture memory is being used at any one time so performance should be improved.
If you were to cut the images down even further and load more “sections” at a time, you could save even more texture memory (though how well this works will be dependant on how fast your game scrolls so that you don’t get gaps where an image has not loaded yet).
Also how big are your source images? It could be that you’ve made them bigger than they need to be (e.g. 4096 * 4096 pixels per image which would be overkill).