Memory Advice API 是一个实验性原生 API,可帮助 Android 应用满足内存用量的安全限制。为此,该 API 会估算正在使用的内存资源量,并在超出特定阈值时通知应用,还可以直接向应用报告估算的内存使用量百分比。
该 API 提供的估算结果有助于确定应用应何时调整其内存用量,或为应用的未来版本寻找改进空间。调整可能包括任何会更改内存占用的内容,例如降低视觉和音频资源的细节和质量。
估算的内存资源包括由 malloc 分配的原生堆内存,以及由 OpenGL ES API 和 Vulkan Graphics API 分配的图形内存,使得 Memory Advice API 非常适合游戏和图形密集型应用。
估算依据如下:
- API 收集的设备指标
- 来自设备的机器学习数据
- 设备测试
在 API 级别,Memory Advice API 会定义一组内存建议状态,并通过一组函数将这些状态传递给应用。
分发情况
Memory Advice API 是 Android Game Development Kit (AGDK) 的一部分,并通过以下渠道分发:
- Android Games Jetpack 库中的二进制文件版本。
- AGDK 下载页面上的二进制文件版本。
- AOSP 上的源代码。
Android Games 应使用为其构建环境推荐的 Memory Advice API 版本。对于 Android Studio,我们建议使用 Jetpack 版本。对于 Android Game Development Extension (AGDE),我们建议使用 AGDK 下载页面上的版本。
功能
本部分介绍了 Memory Advice API 的功能。
内存状态
该 API 会向应用报告以下内存状态:
- MEMORYADVICE_STATE_OK
- MEMORYADVICE_STATE_APPROACHING_LIMIT
- MEMORYADVICE_STATE_CRITICAL
如需了解详情,请参阅 memoryadvice_memorystate 参考页面。
报告内存状态
该 API 支持通过轮询或回调机制报告内存状态:
轮询:
应用可以随时调用该 API 来检索内存状态。回调:
应用可以通过 Memory Advice API 注册回调函数。 应用会为回调指定调用频率。该 API 会使用此频率来确定应用内存条件接近安全限制或极低时执行回调的时机。如果内存条件安全,则系统不会调用回调。回调从自己的线程中执行,而不是从属于应用的线程中执行。
代价和调用频率注意事项
Memory Advice API 使用计算时间来生成内存状态。成本因设备而异,但通常在每次调用时介于 1 毫秒到 3 毫秒之间。在确定轮询内存状态的频率或为内存状态回调指定何种频率时,您应考虑此开销。
要求
设备要求
- Android 4.4(API 级别 19)或更高版本。
应用要求
该 API 仅支持原生应用(主要使用 C/C++ 编写的应用)。
该 API 仅支持实体设备,不支持模拟器。
NDK 版本要求
Memory Advice API 版本支持大多数常见的 NDK 版本。请参阅版本说明,查看受支持的 NDK 列表。
其他资源
问题和反馈
Memory Advice API 目前处于 Beta 版阶段,欢迎提供反馈。如果您有任何建议或在使用该 API 时发现了任何问题,请在 IssueTracker 中创建问题。