3 回答

TA貢獻1906條經驗 獲得超10個贊
通過野外部署,我發現了以下設備:
限制為16 MiB的設備(Java堆+本機位圖存儲)
限制為24 MiB的設備(Java堆+本機位圖存儲)
24 MiB往往是高分辨率設備,可以使用Runtime.getRuntime()。maxMemory()進行檢測?,F在也有32MiB設備,并且某些植根電話默認情況下具有64MiB。以前,我幾次試圖弄清楚自己發生的事情時都感到困惑。我認為所有設備都將位圖計入堆限制。但是,很難對android機群進行全面的概括。
這是Android上的一個非常討厭的問題,非常令人困惑。此限制及其行為的文獻記載不充分,復雜且極其不直觀。它們還因設備和操作系統版本而異,并具有幾個已知的錯誤。問題的部分原因在于限制不精確-由于堆碎片,您將在實際限制之前達到OOM,并且必須保守地保留一兩個meg緩沖區。更糟糕的是,我有幾臺設備在發生Java OOM異常之前就發生了本機段錯誤(Android本身是100%的錯誤),因此永遠都無法達到極限變得非常重要,因為您甚至無法捕獲本機崩潰。有關我的調查的更多詳細信息,請查看這篇文章。在同一篇文章中,我解釋了如何根據限制衡量使用情況并避免崩潰。
Java堆的大小為Runtime.getRuntime()。totalMemory()。
沒有簡單的方法可以測量本機位圖存儲的大小??梢允褂肈ebug.getNativeHeapAllocatedSize()來衡量整個本機堆,但是只有位圖會計入限制(我認為)。
- 3 回答
- 0 關注
- 522 瀏覽
添加回答
舉報