Androidアプリケーションを作成しましたが、ランダムに表示されるメモリ不足の例外でいくつかの奇妙な問題が発生します。はい、通常は画像が原因でOOM例外が発生することを知っています。この問題を回避するために、できる限りのことを行いました。記憶を使う場所を見つけるために私が考えることができる唯一の方法は、どこにでも記憶に関する情報をログに記録することです。しかし、私はどの値が必要かについて本当に混乱しました。
次の値を使用しました:
- Runtime.getRuntime()。maxMemory()
- Runtime.getRuntime()。freeMemory()
- Runtime.getRuntime()。totalMemory()
- Debug.getNativeHeapAllocatedSize()
- Debug.getNativeHeapFreeSize()
- Debug.getNativeHeapSize()
そして、OOM例外の前に、次の値があります。
- maxMemory:57344K
- freeMemory:9581K
- totalMemory:22407K
- NativeHeapAllocatedSize:34853K
- NativeHeapFreeSize:302K
- NativeHeapSize:40060K
- lowMemory false
この質問では、 Androidビットマップの制限-java.lang.OutOfMemoryの防止このブログで使用されている競合((reqsize + Debug.getNativeHeapAllocatedSize()+ heapPad)> = Runtime.getRuntime()。maxMemory())antに奇妙な情報があります。
Debug.getNativeHeapFreeSize(); 空きサイズは、断片化またはプロビジョニングのために使用されていないヒープからのメモリの量です。
また、(totalMemory:22407K)が(maxMemory:57344K)よりもはるかに少ない場合、hawがOOM例外になる可能性があることも理解できません。
この値の使用方法を理解するのを手伝ってください。