Native Pluginを作らずにAndroidアプリのメモリ使用量を取得する【Unity】
概要
Androidでアプリ全体のメモリ使用量を取得する場合Native Pluginを作るのが一般的ですが、AndroidJavaClassを使えばNative Plugin無しでも実装できそうだったので実装してみました。
実装
public static long GetMemorySize() { var unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); var activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity"); var application = activity.Call<AndroidJavaObject>("getApplication"); var context = activity.Call<AndroidJavaObject>("getApplicationContext"); var staticContext = new AndroidJavaClass("android.content.Context"); var service = staticContext.GetStatic<AndroidJavaObject>("ACTIVITY_SERVICE"); var activityManager = activity.Call<AndroidJavaObject>("getSystemService", service); var process = Process.GetCurrentProcess(); var pidList = new int[] { process.Id }; var memoryInfoList = activityManager.Call<AndroidJavaObject[]>("getProcessMemoryInfo", pidList); long total = 0; foreach(var memoryInfo in memoryInfoList) { total += memoryInfo.Call<int>("getTotalPss") * 1024;// kB単位なのでByte単位に直す } return total; }
実行速度の面ではNative Pluginを作った方がいいと思いますが、ちょっと試すだけならこの方が楽で良さそうです。
環境
- Unity2019.2.9f1
- Nexus 5X (Android6.0.1)