为什么我们无法在创建对象时直接实例化系统服务,例如位置管理器。相反,我们这样做
getSystemService(Context.LOCATION_SERVICE)
答案 0 :(得分:1)
因为您需要在该系统中作为单一服务存在的系统服务。这基于singleton design pattern。 拥有相同服务的多个对象会与Android的设计发生冲突,其中LocationManager是针对该类型Context的单一服务。
来自source 的
注意:通过此API获得的系统服务可能与获取它们的上下文密切相关。通常,不要在各种不同的上下文(活动,应用程序,服务,提供程序等)之间共享服务对象。
想象一下,如果每种不同类型的上下文都必须维护不同类型的服务
另一个原因还在于许多这些服务需要清单中的权限。集中式(基于系统)方法来获取服务还可以确保应用程序拥有正确的权限。