コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】iOS や Android で端末のメモリが不足してきた時に呼び出されるコールバック「Application.lowMemory」紹介

使用例

using System.Collections.Generic;
using UnityEngine;

public class Example : MonoBehaviour
{
    private readonly List<Texture2D> m_textures = new List<Texture2D>();

    private void Awake()
    {
        Application.lowMemory += OnLowMemory;
    }

    private void Update()
    {
        // 毎フレームテクスチャを生成してリストに追加
        m_textures.Add( new Texture2D( 1024, 1024 ) );
    }

    private void OnLowMemory()
    {
        // すべてのテクスチャを解放
        m_textures.Clear();
        Resources.UnloadUnusedAssets();
    }
}

解説(公式のドキュメントの引用)

Application.lowMemory は、iOS や Android で
アプリがフォアグラウンドになっている時に、
端末のメモリが不足してくると呼び出されます

そのため、メモリ不足でアプリが強制終了することを防ぐために、
Application.lowMemory が呼び出された時に不要なアセットを解放できます

また、アプリが強制終了してデータが失われないように、
一時的なデータを永続的なストレージに保存することも可能です

Application.lowMemory は各プラットフォームにおいて
下記のコールバックに対応しています

  • iOS::[UIApplicationDelegate applicationDidReceiveMemoryWarning]
  • Android:onLowMemory()onTrimMemory(level == TRIM_MEMORY_RUNNING_CRITICAL)

参考サイト様

関連記事