はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【Unity】iOS,Androidでメモリが少なくなったときのコールバックを設定する(Application.lowMemory)

はじめに

Unityの公式ドキュメントをみていたら面白そうなイベントを見つけました。
docs.unity3d.com

これについて軽く紹介をしていきたいと思います。

Application.lowMemory

Application.lowMemoryというメモリが少なくなったときに呼ばれるイベントが用意されているようです。

ドキュメントをみたところiOS,Andorid,UWPには対応しているみたいでした。

ただ以下のような文言があったので、アプリが最前列?(バックグラウンドでない状態)でないとイベントは呼ばれないっぽいのでそこは注意してください。

This only occurs when your app is running in the foreground.

またUWPで使う場合には注意書きがあったのでそちらもチェックしてみてください。

使い方

メモリが少なくなったらまず不要なアセットを削除するべきでしょう。

それを自動でしてくれるメソッドResources.UnloadUnusedAssetsも用意されているので、おまじないの意味合いも兼ねて書いておいて損はないと思います。
docs.unity3d.com

public class Test : MonoBehaviour
{
    private void Awake()
    {
        Application.lowMemory += OnLowMemory;
    }

    private void OnDestroy()
    {
        Application.lowMemory -= OnLowMemory;
    }

    private void OnLowMemory()
    {
        Debug.Log("メモリが少なくなりました.");
        Resources.UnloadUnusedAssets();
    }
}

さいごに

メモリが不足してしまうのは色々な要因が考えられますが、もしかしたらメモリリークが起きている可能性もあります。

そういうのもを防ぐため参照が不必要に残っていないかはチェックしてみてください。(私も人のことを言えませんが・・・)

特に以下の記事のメモリリークの箇所はすごく良いことが書かれているので、もしみたことがないかたは一読してみるといいかもしれません。
madnesslabo.net

今回はこれくらいで。

ではまた。