Unity3D 呼叫Android原生方法2
阿新 • • 發佈:2019-02-19
記一次Unity通過Android系統函式獲取記憶體資訊的過程,感謝河馬爸爸指導。
Unity原生方法沒有獲取當前可用記憶體的方法,系統記憶體資訊android底層肯定有方法獲取,於是我搜到了這篇文章(http://blog.csdn.net/sxwyf248/article/details/5981251) 提取文章中我主要想要的內容,自己新建了Android工程(為了獲取程式碼中類所在的庫和列舉值或常量值)如下://獲取android當前可用記憶體大小 private String getAvailMemory() { android.app.ActivityManager am = (android.app.ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); android.app.ActivityManager.MemoryInfo mi = new android.app.ActivityManager.MemoryInfo(); am.getMemoryInfo(mi); //mi.availMem; 當前系統的可用記憶體 return Formatter.formatFileSize(getBaseContext(), mi.availMem);// 將獲取的記憶體大小規格化 }
Context.ACTIVITY_SERVICE
轉到定義獲得到常量值為:
// Field descriptor #37 Ljava/lang/String;
public static final java.lang.String ACTIVITY_SERVICE = "activity";
至此,通過Android原生方法獲取記憶體資訊的所有資料我們已經掌握了。
Unity內新建一個C#類,翻譯上面的方法,如下:
知識點1:AndroidJavaObject可以當成任何java類使用,不用考慮引用。 知識點2:類中類用$,如例("android.app.ActivityManager$MemoryInfo",在java中對應的是android.app.ActivityManager.MemoryInfo。MemoryInfo是ActivityManager類檔案中的類中類) 知識點3:屬性直接用Get<T>(“屬性名”);獲取。 送佛送到西~ 額外功能://獲取剩餘記憶體 long getAvailMemory() { AndroidJavaObject am = Current().Call<AndroidJavaObject>("getSystemService", "activity"); AndroidJavaObject mi = new AndroidJavaObject("android.app.ActivityManager$MemoryInfo"); am.Call("getMemoryInfo", mi); return mi.Get<long>("availMem");// 將獲取的記憶體大小規格化 }
String size2string(long size) { //DecimalFormat df = new DecimalFormat("0.00"); String mysize = ""; if (size > 1024 * 1024) { mysize = string.Format("{0:###.##}", size / 1024f / 1024f) + "M"; } else if (size > 1024) { mysize = string.Format("{0:###.##}", size / 1024f) + "K"; } else { mysize = size + "B"; } return mysize; }