Android---App内存优化-之-使用ARTHook检测不合理的图片

63 阅读1分钟

#Bitmap的内存模型

  • Bitmap对于内存优化至关重要! 图片非常的耗内存

  • API10之前, Bitmap自身存在Dalvik Heap中, 像素存在Native中(不占用Java层的内存,OOM其实也不会发生在Native层); 但是, 这样子做其实是有个不好的地方!!! 比如说, 位于Java层的一个Bitmap已经被回收掉了, 但是其对应的 存储在Native的像素数据 其回收时机,我们并不确定

  • API10之后, 像素也被放在Dalvik Heap中, 即 Bitmap自身对象实例像素数据是放在一起的, 即Bitmap回收的时候,像素信息数据也会马上跟着被回收

  • API26(Android 8.0)之后, 谷歌通过一种优化方案, 把像素信息数据又存放在了Native中, 这个方案就是,相当于加了一种机制—— 使BitmapJava层被回收之后, 能很迅速地通知Native层;


###关键

  • 如何获取Bitmap自身的占用内存
    • getByteCount 直接返回Bitmap自身的占用内存, 但是这个方法的话, 只能在运行时才能算出来; (如果需要在给出一张图的时候, 马上计算出 这张图 被加载到内存当中 需要占用的内存, 则可用以下方案)

    • 图宽 * 图高 * 一像素占用内存