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