I'm making a small-medium 2d game right now(on android) and I just wrote up a singleton to handle loading/caching assets as I always do. I just have it set up so I can call loadAsset(name), unloadAsset(name), and getAsset(name) on the singleton to load and use assets and whatnot. the implementation is an ObjectMap(LibGDX's version of hashmap, it's the same as a java hashmap on the surface but allegedly is better with handling memory under the hood to cater to android's limited memory/nasty GC) that just maps the name to the textureregion. the texture regions come from a textureatlas storing many images that is also loaded and cached but libgdx suggests you cache the region itself because it has to relookup the region everytime and apparently it is costly.
I've just been doing it this way forever because it's be good enough for my needs but I see a lot of people hating on singletons and want to check to make sure I'm not making a bad decision by doing it this way, or if anyone has a better suggestion. I use a similar technique for all my games but right now I'd like the question to be answered in the context of a 2d libgdx game that will target android and probably ios.
Thanks for any help, I'd appreciate any solutions you guys can give me but most of all I'd like to have a good explanation so I can understand why this is or isn't a good idea and why something else may be a good idea, basically I want to advance my understanding as much as I can and any help in that regard would be appreciated.