Is PreloadAsync Not Keeping Images Loaded?

I am using the code from the documentation to preload images that will be used for an animation.

local ContentProvider = game:GetService("ContentProvider")

local frame1 = Instance.new("ImageLabel")
frame1.Image = "rbxassetid://111111111"
local frame2 = Instance.new("ImageLabel")
frame2.Image = "rbxassetid://222222222"

local assets = {
	frame1,
	frame2,
}

-- Preload the content
ContentProvider:PreloadAsync(assets)

Then I am playing the animation by updating the image id during Heartbeat:

-- Play frame 1
ImageLabel.Image = "rbxassetid://111111111"
-- At next heartbeat, play the next frame:
ImageLabel.Image = "rbxassetid://222222222"
-- Etc

The problem is that when I play the animation, the images that were preloaded seem to have been offloaded by the system already, and are no longer preloaded.

The only workaround that I could find is discussed in this thread:


Am I doing something wrong to cause the images to be offloaded? Thanks for any suggestions.

Changing images in general can be buggy and has a lot of flashes, it would be better if you used something like a sprite sheet and changed the ImageRect stuff