#Bitmap的内存模型
-
Bitmap对于内存优化至关重要! 图片非常的耗内存; -
API10之前, Bitmap自身存在
Dalvik Heap中, 像素存在Native中(不占用Java层的内存,OOM其实也不会发生在Native层); 但是, 这样子做其实是有个不好的地方!!! 比如说, 位于Java层的一个Bitmap已经被回收掉了, 但是其对应的 存储在Native的像素数据 其回收时机,我们并不确定; -
API10之后, 像素也被放在
Dalvik Heap中, 即Bitmap其自身对象实例跟像素数据是放在一起的, 即Bitmap被回收的时候,像素信息数据也会马上跟着被回收; -
API26(Android 8.0)之后, 谷歌通过一种
优化方案, 把像素信息数据又存放在了Native中, 这个方案就是,相当于加了一种机制—— 使Bitmap在Java层被回收之后, 能很迅速地通知到Native层;
###关键
- 如何获取Bitmap自身的占用内存
-
getByteCount 直接返回Bitmap自身的占用内存, 但是这个方法的话, 只能在运行时才能算出来; (如果需要在给出一张图的时候, 马上计算出 这张图 被加载到内存当中 需要占用的内存, 则可用以下方案)
-
图宽 * 图高 * 一像素占用内存
-