次のコードを使用して、アプリのメモリ使用量をダンプします。
public static void dumpMemoryUsage(Context ctx) {
try {
MemoryInfo mi = new MemoryInfo();
double allocated = new Double(Debug.getNativeHeapAllocatedSize());
double available = new Double(Debug.getNativeHeapSize());
double free = new Double(Debug.getNativeHeapFreeSize());
ActivityManager activityManager = (ActivityManager) ctx.getSystemService(Context.ACTIVITY_SERVICE);
activityManager.getMemoryInfo(mi);
long availableMegs = mi.availMem / 1048576L; //1MB
long threshold = mi.threshold / 1048576L; //1MB
String descr = String
.format(Locale.US,
"+++System available MB:%d\nIs low:%b\nThreshold:%d\nMem class:%d\nallocated:%f\nfree:%f\navailable:%f\n",
availableMegs, mi.lowMemory, threshold,
activityManager.getMemoryClass(), allocated, free, available);
L.l(descr);
} catch (Exception e) {
L.l(e);
}
}
そして、Nexus (2011 モデル) と Galaxy Note 1 の 2 つの異なるデバイスで実行します。Galaxy Note にはメモリの問題があり、1 ~ 2 ビットマップを追加するとすぐにメモリの問題で頻繁に失敗します。
ダンプは次のとおりです:
Nexus:
+++System available MB:154
Is low:false
Threshold:94
Mem class:96
allocated:5663544.000000
free:1377480.000000
available:7081984.000000
ギャラクシーノート:
+++System available MB:316
Is low:false
Threshold:64
Mem class:64
allocated:5361664.000000
free:155648.000000
available:5832704.000000
Debug.getNativeHeapFreeSize() 呼び出しは、nexus では 1377480.000000 を返し、galaxy では 155648.000000 のみを返すことに注意してください。そんなことがあるものか。この電話の本当の意味は何ですか?アプリによる作業を行わずに、アプリの新規インストールで両方のテストを行いました-いくつかのTextViewとボタンがほとんどない最初の画面を表示するだけです。Galaxy Note 1 のメモリ クラスは 64MB なので、その限界に達しているとは思いません。画面に多くのビットマップを追加しても、Nexus でメモリの問題はないので、メモリを使いすぎているとは思いません。