Memory Advice API 是一种实验性原生 API,可帮助 Android 应用将内存使用量保持在安全限制内。该 API 通过估算正在使用的内存资源量,并在超出特定阈值时通知应用来达到此目的。该 API 还可以直接向您的应用报告估算的内存使用百分比。
该 API 提供的估算值有助于确定您的应用何时应调整其内存使用量,或在应用未来版本中查找需要改进的区域。调整可能包括任何改变内存消耗的操作,例如降低视觉和音频资产的细节和质量。
估算的内存资源包括由 malloc 分配的原生堆内存,以及由 OpenGL ES 和 Vulkan Graphics API 分配的图形内存,这使得 Memory Advice API 成为游戏和图形密集型应用的理想选择。
估算基于以下因素:
- API 收集的设备指标
- 来自设备的机器学习数据
- 设备测试
在 API 层面,Memory Advice API 定义了一组内存建议状态,并使用一组函数将其传达给应用。
分发
Memory Advice API 是 Android 游戏开发套件 (AGDK) 的一部分,通过以下渠道分发:
- Android Games Jetpack 库中的二进制版本。
- AGDK 下载页面上的二进制版本。
- AOSP 上的源代码。
游戏应使用为其构建环境推荐的 Memory Advice API 版本。对于 Android Studio,我们建议使用 Jetpack 版本。对于 Android 游戏开发扩展程序 (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 中创建问题。