Memory Advice API の概要

Memory Advice API は、Android アプリがメモリ使用量のセーフティ リミットを超えないようにする、試験運用版のネイティブ API です。そのためこの API は、使用中のメモリリソースの量を推定し、特定のしきい値を超えたときにアプリに通知します。また、メモリ使用率の推定値をアプリに直接報告することもできます。

API が提供する推定値は、アプリでメモリ使用量を調整すべきタイミングを判断したり、アプリの今後のバージョンで改善すべき部分を見つけたりするのに役立ちます。調整には、映像と音声のアセットのディテールや品質を下げるなど、メモリ使用量を変更するあらゆるものが含まれます。

メモリリソースの推定値には、malloc によって割り当てられたネイティブ ヒープメモリと、OpenGL ES API と Vulkan Graphics API によって割り当てられたグラフィック メモリが含まれているため、Memory Advice API はゲームやグラフィックを多用するアプリに最適です。

推定は次のものに基づいて行われます。

  • API によって収集されるデバイス指標
  • デバイスからの機械学習データ
  • デバイスのテスト

Memory Advice API は、API レベルで一連のメモリ アドバイス状態を定義し、いくつかの関数を通じてアプリに通知します。

スタートガイド Unity ゲーム用スタートガイド

配信

Memory Advice API は Android Game Development Kit(AGDK)に含まれており、次のチャネルを介して配信されます。

ゲームは、ビルド環境ごとに推奨される 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 はベータ版であり、皆様からのフィードバックをお待ちしております。この API のご使用中に生じたご提案や問題につきましては、IssueTracker で問題を作成してお知らせください。