今天我们聊一聊,SystemService.java中的两个重要方法:publishBinderService和publishLocalService区别
文件路径:
frameworks/base/services/core/java/com/android/server/SystemService.java
1.publishBinderService
1.1通过publishBinderService方法发布得Service上层可以访问对应服务Manager
/**
* Publish the service so it is accessible to other services and apps.
* 发布该服务,以便其他服务和应用程序可以访问该服务。
* @param name the name of the new service
* @param service the service object
*/
protected final void publishBinderService(String name, IBinder service) {
publishBinderService(name, service, false);
}
1.2 例如
frameworks/base/services/core/java/com/android/server/display/color/ColorDisplayService.java
控制显示的颜色变换。
下图publishBinderService:
frameworks/base/core/java/android/app/SystemServiceRegistry.java
对应ColorDisplayManager是可以让层应用访问得,就可拿到ColorDisplayManager的实例,方式如下:
方式一:
ColorDisplayManager mColorDisplayManager = context.getSystemService(ColorDisplayManager.class);
方式二:
ColorDisplayManager mColorDisplayManager = (ColorDisplayManager)context.getSystemService(Context.COLOR_DISPLAY_SERVICE);
对应ColorDisplayServiceInternal只能系统访问,
ColorDisplayServiceInternal mColorDisplayServiceInternal = LocalServices.getService(ColorDisplayServiceInternal.class);
2.publishLocalService
2.1 通过publishLocalService方法发布得Service,上层不可以访问对应服务Manager,只能System 进程访问。
/**
* Publish the service so it is only accessible to the system process.
发布服务,使其仅可供系统进程访问。
*/
protected final <T> void publishLocalService(Class<T> type, T service) {
LocalServices.addService(type, service);
}
2.2例如:
frameworks/base/services/core/java/com/android/server/twilight/TwilightService.java
暮色服务,主要是指日落-日出时间段管理。
根据用户的位置判断是否是夜暮时间。由UI模式管理器和其他组件用于根据日出和日落调整夜间模式效果。
下图publishLocalService:
对应TwilightManager只能系统访问,
TwilightManager mTwilightManager = LocalServices.getService(TwilightManager.class);