I noticed that my game was making a lot of calls to StringTokenizer and other String-related classes during significant portions of its load time. My game spent nearly 50% of its load time chugging away at Strings somewhere. This perplexed me for weeks until I noticed some calls to BitmapFont. I knew that BitmapFont had some expensive operations but I didn’t realize that just creating a new instance is very expensive.
I went about consolidating all the BitmapFont instances into one shared instance in the main Game class. I then passed the reference to this instance into the constructors for whatever classes needed to write text to the screen. Going from 4 instances of BitmapFont to just 1 shaved about 4 seconds off the load time. That’s a huge improvement when my game used to take 8 seconds to load on my Evo 4G.
So if method profiling yields several groups of StringTokenizer calls lasting around 1-2 seconds during your game’s loading phase, check if you are using more than one instance of BitmapFont. If all of your text uses the same font style and size, try using one shared instance.
Can you provide me with your original, uncosolidated font files? I’d like to reproduce your load time claims and fix them if possible. An issue on the issue tracker would help a lot
Sure, I’ll email them to you. I kinda felt like loading the same font in several classes wasn’t the right way to do it, anway. I’m not sure if it’s a bug with libGDX as much as my code.
Also, I’ll open an issue once I track down my old code.