When updateDisplayList is called by a container, it calls the updateDisplayList method for all of its children also. Perhaps you could put the elements that need to animate in a separate container from your heavy skinnable components and call the invalidateDisplayList on that container alone, instead of the entire application.
Instead of using app.invalidateDisplayList(), try ContainerB.invalidateDisplayList
Well, the animating elements are in a different container from the skinned ones-- I'm actually calling invalidateDisplayList on each of the animating elements individually, which is usually some but not all of the ones in the container. Would it be more efficient just to make a single call to invalidateDisplayList() for that whole container, even if only some of its children are actually updated, rather than making four or five calls to invalidateDisplayList() on the Sprites?
No, I don't believe it wouldn't be more efficient to call the updateDisplayList method on a container rather than individual child componenets.
Maybe I am mistaken, but I thought that the lowest level FLEX componenet that participates in the flex lifecycle (commitProperties(), measure(), updateDisplayList(), etc.) was the UIComponent and not a low level flash sprite. I am surprised that the sprites respond to the invalidation methods at all. Are you wrapping the sprites in a Flex component?
Try cacheAsBitmap on the background of the animation