Android:Manager和SystemService架构

时间:2014-03-31 07:44:05

标签: android android-service android-source android-service-binding

在开发新的系统服务时,我想确保我是正确的。比方说,我有一个名为MySystemManagerService的新SystemService。所以我必须创建一个MySystemManager。 (类似于PackageManager& PackageManagerService,ActivityManager和ActivityManagerService)。

我想知道Manager&amp ;; ManagerService组合,我们不能仅使用Service来完成同样的事情。

对此我的任何想法对我都有很大的帮助。

1 个答案:

答案 0 :(得分:3)

处理系统服务的传统方式是拥有Manager和ManagerService。这样做的原因是Manager封装了您希望用户可以使用的所有功能。 PackageManager和ActivityManager就是很好的例子,但范围很广。对于较小的示例,我会查看DevicePolicyManagerDevicePolicyManagerService

你可以看到管理器根本没有做任何事情,除了包装丑陋​​的try catch语句并使事情看起来更好一些。它也很好地包含了暴露给开发人员的所有功能。这基本上就是你从经理那里得到的。

如果查看Manager调用的任何方法(在服务中),您将看到此enforceCrossUserPermission(userhandle)方法。它自己的服务正在进行权限检查。虽然开发人员可以通过Stub手动处理服务,但是如果它正在进行安全检查,它仍然无法使用该服务提供的任何方法。

该服务可以丰富并以这种方式为系统提供许多功能,但您仍然可以向用户公开服务的某些部分。只要您对不希望任何随机用户使用的方法执行安全检查,该功能仍然是系统的一部分。

总而言之,如果您计划为您的mod公开一个公共SDK,那么您真的应该遵循该模式以使用户的生活更轻松。但是,如果您只想为系统提供服务,您可以像我上面链接的那样检查一些权限,并将您的功能保持在系统本地。

请记住,您未执行安全检查的任何功能基本上都会向用户公开,并且可以根据用户的需要使用。