Android System服务无法在创建处理程序时直接实例化

时间:2015-04-17 06:52:24

标签: android

为什么我们无法在创建对象时直接实例化系统服务,例如位置管理器。相反,我们这样做

getSystemService(Context.LOCATION_SERVICE)

1 个答案:

答案 0 :(得分:1)

因为您需要在该系统中作为单一服务存在的系统服务。这基于singleton design pattern。 拥有相同服务的多个对象会与Android的设计发生冲突,其中LocationManager是针对该类型Context的单一服务。

来自source

  

注意:通过此API获得的系统服务可能与获取它们的上下文密切相关。通常,不要在各种不同的上下文(活动,应用程序,服务,提供程序等)之间共享服务对象。

想象一下,如果每种不同类型的上下文都必须维护不同类型的服务

另一个原因还在于许多这些服务需要清单中的权限。集中式(基于系统)方法来获取服务还可以确保应用程序拥有正确的权限。