The question on when to use the Service Locator pattern is self-explanatory, based on its description. For example, if you have a list of services that you dynamically need to access but want to encapsulate the process involved in obtaining them, then this pattern can offer a solution.
But another aspect we should consider when contemplating using the Service Locator pattern is when not to use it. Because a Service Locator pattern is usually globally accessible, as its name implies, it should locate and provide access to services. Then, we should use it only to expose services that have a global scope.
For instance, we need to access the heads-up display (HUD) to update one of its user interface (UI) components. Should we consider the HUD a global service that should be accessible through the Service Locator pattern? The answer should be no, as the HUD only appears during certain parts of the game and should be accessible only by particular components...