高解像度のグラフィックスを多く含むアプリを開発しています。私のタブレットでは問題なく動作します。しかし、スマートフォンで実行すると、メモリ不足の例外が発生します。グラフィックの一部を削除すると、正常に動作します。
使用可能なメモリ量を検出する方法はありますか? そうすれば、メモリが少ない場合はすべてのグラフィックを使用しないことがわかります。
高解像度のグラフィックスを多く含むアプリを開発しています。私のタブレットでは問題なく動作します。しかし、スマートフォンで実行すると、メモリ不足の例外が発生します。グラフィックの一部を削除すると、正常に動作します。
使用可能なメモリ量を検出する方法はありますか? そうすれば、メモリが少ない場合はすべてのグラフィックを使用しないことがわかります。
デバイスの RAM は関係ありません。プロセスに使用できるメモリは重要です。
アプリのメモリ クラスを調べるには、ActivityManager で getMemoryClass() を呼び出します。これは基本的に、プロセスで使用可能な RAM の量を MB 単位で返します。
LogCat を見てください。特定の時点でのメモリの空き容量が表示されます (フィルタを適用して、アプリに適用されるメッセージを取得するだけです)。
以下のメソッドは、メモリ統計をログに書き込みます。
private static void dumpMemoryStateToLog() {
double heapSize = Runtime.getRuntime().totalMemory();
double heapRemaining = Runtime.getRuntime().freeMemory();
double nativeUsage = Debug.getNativeHeapAllocatedSize();
long maxMemory = Runtime.getRuntime().maxMemory();
double heapUsage = heapSize - heapRemaining;
double usedMemoryRatio = (heapUsage + nativeUsage) / maxMemory;
String msgFormat = "Memory state: max: %,d, heap: %,d, native usage: %,d, used memory: %,d%%";
int usedMemoryInPercents = (int) (usedMemoryRatio * 100);
Log.d(LOG_TAG, String.format(msgFormat, maxMemory, (int) heapUsage, (int) nativeUsage, usedMemoryInPercents));
}