我一直在玩弄 AOSP,并且注意到一些关于系统服务的东西。他们中的很多人喜欢直接使用访问系统服务存根,如下所示:
IDevicePolicyManager dpm = IDevicePolicyManager.Stub.asInterface(
ServiceManager.getService(Context.DEVICE_POLICY_SERVICE));
这是完成的,而不是使用 mContext 请求它们,如下所示:
DevicePolicyManager dpm = (DevicePolicyManager)
context.getSystemService(Context.DEVICE_POLICY_SERVICE);
现在起初我认为这可能是因为没有可用的上下文,但有。一个很好的例子是 deletePackageX 方法,它是 PackageManagerService 类的一部分。您可以将存根方法更改为 getSystemService 方法,并且一切似乎都可以正常工作。
应用程序不能使用存根方法自然有安全原因,但它们使用存根方法进行系统服务肯定是有原因的。
所以问题是他们为什么要在上下文中使用存根来获取其他系统服务?