- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在研究 AOSP,我注意到了一些关于系统服务的东西。他们中的很多人喜欢像这样直接访问系统服务 stub :
IDevicePolicyManager dpm = IDevicePolicyManager.Stub.asInterface(
ServiceManager.getService(Context.DEVICE_POLICY_SERVICE));
这是完成的,而不是像这样使用 mContext 请求它们:
DevicePolicyManager dpm = (DevicePolicyManager)
context.getSystemService(Context.DEVICE_POLICY_SERVICE);
起初我认为这可能是因为没有可用的上下文,但有。一个很好的例子是 deletePackageX 方法,它是 PackageManagerService 类的一部分。您可以将 stub 方法更改为 getSystemService 方法,并且一切仍然SEEMS 正常工作。
应用程序不能使用 stub 方法自然有安全原因,但系统服务使用 stub 方法肯定有一些原因。
所以问题是,为什么他们在上下文中使用 stub 来获取其他系统服务?
最佳答案
因此,在深入了解 ContextImpl.java 以查看 getSystemService 调用的作用后,它实际上只是 Stub.asInterface 调用的包装器,您经常在系统服务中看到它。因此,当您创建系统服务并希望将其公开给 SDK 时,您需要将其注册到上下文中,以便非系统应用程序能够获取它的句柄。大多数服务的注册看起来像这样:
registerService(ALARM_SERVICE, new ServiceFetcher() {
public Object createService(ContextImpl ctx) {
IBinder b = ServiceManager.getService(ALARM_SERVICE);
IAlarmManager service = IAlarmManager.Stub.asInterface(b);
return new AlarmManager(service, ctx);
}});
是不是很眼熟?但是当你取回系统服务时,服务 getter 会做一些其他的开销,比如缓存你的服务,这样你就可以在后续调用中更快地取回它。 (那里有更多的开销,我没有详细研究,但我认为是为了优化)
所以基本上,通过 stub 直接获取服务可以节省开销并比通过上下文更快地执行操作。上下文只是为了让非系统应用程序可以访问您的服务,并且您希望通过 SDK 公开它。但最终,相同的代码最终会被执行。
如果您是系统应用程序,通过 stub 获取服务可能会更快。
关于android - AOSP stub 与 getSystemService,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19325010/
我正在 AOSP 4.0.4 分支上工作,并为 PandaBoard 平台做一些定制。我查看了用于构建 Android 文件系统镜像的 ARM 交叉工具链,我看到了 2 个主要变体。 arm-eabi
有什么方法可以阻止用户在自定义 android 操作系统中安装来自未知来源的应用程序? 我正在尝试使用 AOSP 源创建 Android 操作系统的自定义变体,在其中我希望允许用户仅安装来自我在构建期
如何在 AOSP 构建中查看详细的编译命令? ndk-build 提供 V=1 选项。从源代码构建怎么样?我可以输入类似于 的内容吗 . build/envsetup.sh lunch make li
在完全配置 AOSP 之后。我尝试使用 make -j4 构建它。但是我收到以下错误: ============================================ PLATFORM_
我是 Android retrofit 的新手,我想知道如何在不修改我自己的设备(摩托罗拉 Moto G 2014)的情况下构建 AOSP。 我已经阅读了 Google 指南,但它仅显示了如何为 Ne
我正在为 Android 8.1 版构建 AOSP,我想实现自己的应用商店,因此需要将 apk 安装到系统上。 到目前为止,我看到的唯一方法是使用如下内容: val intent = Intent(I
由于 Android studio 3.5 未检测到系统镜像,我正在尝试构建汽车模拟器。我已经在 Android 8 和 9 中尝试过并下载了所有工具。如何在 AOSP 中构建汽车模拟器? 最佳答案
我有一个 AOSP 5.1 - 在我的 Allwinner A33 设备上构建。 长按“电源按钮”时,设备会启动“关机”程序。它显示了一个对话框“关闭电源”以及一个微调器(见屏幕截图)。这会持续约 3
我正在从 AOSP 源代码构建自定义 rom 我首先决定通过下载并导入到 Android Studio 来从 AOSP 源代码树编辑一些 AOSP 应用 我选择了 ExactCalculator 进行
我正在尝试在 Mac OS 上使用 make -jN 构建 aosp,但它以下一个错误结束: required: BlockingQueue found: BlockingQueue N
我可以成功下载并构建 Android 操作系统源代码,并且操作系统镜像运行良好。 操作系统使用“build/target/product/security”下的平台证书进行签名,我使用相同的证书对我的
我已经从 source.android.com 下载了 Android 源代码并构建了它,并且能够在模拟器上成功运行它。 现在我想为 Android 添加新的系统服务。考虑到这是我第一次这样做,我对构
根据安卓指南: 1. 下载仓库 2. repo 初始化 3. repo 同步 我在磁盘中得到了Android 7.1.1的源代码 午餐组合时出现问题 You're building on Darwin
我正在阅读 Android 开源项目中的代码,我看到方法名称具有有趣的结尾,如下所示:addSharedUserLPw()(在 com.android.server.pm.Settings 中)ins
这是与 device-node-access-permissions-in-linux 类似的帖子6年前没有答案。 我在 /dev/magic-i2c 使用 misc_register() 创建了一个
首先,我是 Android 构建的新手,只想从简单的东西开始,所以我想按照索尼关于如何为解锁设备构建 AOSP 的指南为我的 Xperia X (F5121) 构建 AOSP 8.0。 因此,要开始构
我正在为类似平板电脑的设备构建 Android AOSP 6 (Marshmallow),该设备是永久安装的(例如工业部署)并且没有电池。但是,当我给它通电时,它会显示充电指示灯和 0% 的电量读数。
我已经下载了 Lollipop 5.0 的 AOSP 源代码。在 API 级别 21 中,在蓝牙低功耗扫描设置下,有三个用于扫描蓝牙设备的选项 - SCAN_MODE_BALANCED、SCAN_MO
为了熟悉 AOSP,我打算按照 official documentation 构建图像并在模拟器上运行它。 . 设置 Ubuntu 16.04 VM 后,我使用以下命令: repo init -u h
我正在 build AOSP 4.2 Jelly Bean .当我构建默认值时一切正常 full-eng配置并在模拟器上运行。 我需要构建自定义设备并运行它(在 emulator 上 - 用于测试它是
我是一名优秀的程序员,十分优秀!