This is then more about setting the playback timepoint - you can set the timepoint by TrackEntry trackTime. If you loop your animation, this will continue to increase across iterations, then you can query TrackEntry animationTime for the current iteration's time.
Keeping state between application exit and restart has to be done in your application logic (e.g. storing growth percentage state 59%), then you would need to start the animation and place it at the proper time:
SkeletonAnimation skeletonAnimation = this.GetComponent<SkeletonAnimation>();
var track = skeletonAnimation.AnimationState.Tracks.Items[0];
float currentPercentage = track.AnimationTime / (track.AnimationEnd - track.AnimationStart);
float storedPercentage = 0.59f;
track.TrackTime = storedPercentage * (track.AnimationEnd - track.AnimationStart) + track.AnimationStart;
Or you do it like in the SpineGauge example scene and have only a SkeletonRenderer
instead of SkeletonAnimation
and update the playback timepoint manually every frame/update:
growAnimation.Animation.Apply(skeleton, 0, percent, false, null, 1f, MixBlend.Setup, MixDirection.In);