内存建议 API 是一个实验性的原生 API,它可以帮助 Android 应用保持在内存使用的安全限制范围内。API 通过估计正在使用的内存资源量来实现这一点,然后在超过特定阈值时通知应用。API 还可以将估计的内存使用百分比直接报告给您的应用。
API 提供的估计有助于确定何时您的应用应调整其内存使用情况,或在您应用的未来版本中查找改进的领域。调整可能包括任何改变内存消耗的内容,例如降低视觉和音频资产的细节和质量。
估计的内存资源包括由 malloc 分配的原生堆内存,以及由 OpenGL ES 和 Vulkan 图形 API 分配的图形内存,这使得内存建议 API 非常适合游戏和图形密集型应用。
估计基于以下内容
- API 收集的设备指标
- 来自设备的机器学习数据
- 设备测试
在 API 级别,内存建议 API 定义了一组内存建议状态,并使用一组函数将它们传达给应用。
发行版
内存建议 API 是 Android 游戏开发套件 (AGDK) 的一部分,并通过以下渠道分发
- Android 游戏 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 中创建问题。